Issue diagnostics (instead of crashing in code gen) when using

property dot-syntax notation to use setter/getters in objective-c. 
Fixes radar 7553050.

llvm-svn: 93883
This commit is contained in:
Fariborz Jahanian 2010-01-19 17:48:02 +00:00
parent fb5f40f959
commit c1d2fa5d48
2 changed files with 16 additions and 9 deletions

View File

@ -3082,15 +3082,9 @@ Sema::LookupMemberExpr(LookupResult &R, Expr *&BaseExpr,
if (Setter && DiagnoseUseOfDecl(Setter, MemberLoc))
return ExprError();
if (Getter || Setter) {
if (Getter) {
QualType PType;
if (Getter)
PType = Getter->getResultType();
else
// Get the expression type from Setter's incoming parameter.
PType = (*(Setter->param_end() -1))->getType();
// FIXME: we must check that the setter has property type.
PType = Getter->getResultType();
return Owned(new (Context) ObjCImplicitSetterGetterRefExpr(Getter, PType,
Setter, MemberLoc, BaseExpr));
}

View File

@ -80,11 +80,24 @@ static int g_val;
}
@end
@interface C {}
// - (int)Foo;
- (void)setFoo:(int)value;
@end
void g(int);
void f(C *c) {
c.Foo = 17; // expected-error {{property 'Foo' not found on object of type 'C *'}}
g(c.Foo); // expected-error {{property 'Foo' not found on object of type 'C *'}}
}
void abort(void);
int main (void) {
Subclass *x = [[Subclass alloc] init];
x.setterOnly = 4;
x.setterOnly = 4; // expected-error {{property 'setterOnly' not found on object of type 'Subclass *'}}
if (g_val != 4)
abort ();
return 0;