forked from OSchip/llvm-project
MS extensions: Properly diagnose address of MS property decl
Summary: Fixes PR22671. Reviewers: rsmith Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7863 llvm-svn: 230362
This commit is contained in:
parent
96cf7abf4d
commit
85c7e0a3f3
|
@ -418,9 +418,10 @@ static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D) {
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -9352,6 +9352,8 @@ QualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {
|
|||
!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)) {
|
||||
|
|
|
@ -344,6 +344,18 @@ struct StructWithUnnamedMember {
|
|||
__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 {};
|
||||
|
||||
|
|
Loading…
Reference in New Issue