From: Fariborz Jahanian Date: Tue, 19 Jan 2010 17:48:02 +0000 (+0000) Subject: Issue diagnostics (instead of crashing in code gen) when using X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd0cb9097ff4a9c88cb6a3cd377245ecb260c120;p=clang Issue diagnostics (instead of crashing in code gen) when using property dot-syntax notation to use setter/getters in objective-c. Fixes radar 7553050. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93883 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index eaf392116f..f8f3e05f56 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -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)); } diff --git a/test/SemaObjC/property-user-setter.m b/test/SemaObjC/property-user-setter.m index c06f2b6f44..babccee4a7 100644 --- a/test/SemaObjC/property-user-setter.m +++ b/test/SemaObjC/property-user-setter.m @@ -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;