[PATCH] MS extensions: Properly diagnose address of MS property decl
Reid Kleckner
rnk at google.com
Tue Feb 24 11:51:02 PST 2015
Hi rsmith,
Fixes PR22671.
http://reviews.llvm.org/D7863
Files:
lib/AST/ExprClassification.cpp
lib/Sema/SemaExpr.cpp
test/SemaCXX/MicrosoftExtensions.cpp
Index: lib/AST/ExprClassification.cpp
===================================================================
--- lib/AST/ExprClassification.cpp
+++ lib/AST/ExprClassification.cpp
@@ -418,9 +418,10 @@
islvalue = NTTParm->getType()->isReferenceType();
else
islvalue = isa<VarDecl>(D) || isa<FieldDecl>(D) ||
- isa<IndirectFieldDecl>(D) ||
- (Ctx.getLangOpts().CPlusPlus &&
- (isa<FunctionDecl>(D) || isa<FunctionTemplateDecl>(D)));
+ isa<IndirectFieldDecl>(D) ||
+ (Ctx.getLangOpts().CPlusPlus &&
+ (isa<FunctionDecl>(D) || isa<MSPropertyDecl>(D) ||
+ isa<FunctionTemplateDecl>(D)));
return islvalue ? Cl::CL_LValue : Cl::CL_PRValue;
}
Index: lib/Sema/SemaExpr.cpp
===================================================================
--- lib/Sema/SemaExpr.cpp
+++ lib/Sema/SemaExpr.cpp
@@ -9352,6 +9352,8 @@
!getLangOpts().CPlusPlus) {
AddressOfError = AO_Register_Variable;
}
+ } else if (isa<MSPropertyDecl>(dcl)) {
+ AddressOfError = AO_Property_Expansion;
} else if (isa<FunctionTemplateDecl>(dcl)) {
return Context.OverloadTy;
} else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {
Index: test/SemaCXX/MicrosoftExtensions.cpp
===================================================================
--- test/SemaCXX/MicrosoftExtensions.cpp
+++ test/SemaCXX/MicrosoftExtensions.cpp
@@ -344,6 +344,18 @@
__declspec(property(get=GetV)) int : 10; // expected-error {{anonymous property is not supported}}
};
+struct MSPropertyClass {
+ int get() { return 42; }
+ int __declspec(property(get = get)) n;
+};
+
+int *f(MSPropertyClass &x) {
+ return &x.n; // expected-error {{address of property expression requested}}
+}
+int MSPropertyClass::*g() {
+ return &MSPropertyClass::n; // expected-error {{address of property expression requested}}
+}
+
namespace rdar14250378 {
class Bar {};
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7863.20611.patch
Type: text/x-patch
Size: 1945 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150224/3482f027/attachment.bin>
More information about the cfe-commits
mailing list