Diagnose, and not crash, when taking address of property expression.
llvm-svn: 74935
This commit is contained in:
parent
32bc1e1a3b
commit
385db80cc5
|
@ -4678,6 +4678,11 @@ QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) {
|
|||
Diag(OpLoc, diag::err_typecheck_address_of)
|
||||
<< "vector element" << op->getSourceRange();
|
||||
return QualType();
|
||||
} else if (isa<ObjCPropertyRefExpr>(op)) {
|
||||
// cannot take address of a property expression.
|
||||
Diag(OpLoc, diag::err_typecheck_address_of)
|
||||
<< "property expression" << op->getSourceRange();
|
||||
return QualType();
|
||||
} else if (dcl) { // C99 6.5.3.2p1
|
||||
// We have an lvalue with a decl. Make sure the decl is not declared
|
||||
// with the register storage-class specifier.
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: clang-cc -fsyntax-only -verify %s
|
||||
|
||||
@interface AddressMyProperties
|
||||
{
|
||||
unsigned index;
|
||||
}
|
||||
@property unsigned index;
|
||||
@end
|
||||
|
||||
@implementation AddressMyProperties
|
||||
@synthesize index;
|
||||
@end
|
||||
|
||||
int main() {
|
||||
AddressMyProperties *object;
|
||||
&object.index; // expected-error {{address of property expression requested}}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue