On May 24, 2012, at 11:37 AM, Jordy Rose wrote: > In this case, are 't' and 'T' distinct properties? Both of them will have > -setT: as their setters, even if they have distinct getters, yes? Any program > that has both 't' and 'T' will most likely end up with incorrect behavior. >
That's correct. This issue though is unrelated to this patch. clang's and llvm-gcc's behaviors are identically incorrect. A diagnostic of some kind is warranted. Please file a bugzilla to cover this issue. - fariborz > > On May 24, 2012, at 14:29, Fariborz Jahanian wrote: > >> Author: fjahanian >> Date: Thu May 24 13:29:41 2012 >> New Revision: 157407 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=157407&view=rev >> Log: >> objective-c: Fixes a corner case and interesting bug. >> Where diagnostic about unfound property is not >> issued in the context where a setter is looked up >> in situation in which name and property name differ >> in their first letter case. // rdar://11363363 >> >> Modified: >> cfe/trunk/lib/Sema/SemaExprObjC.cpp >> cfe/trunk/test/SemaObjC/property-user-setter.m >> >> Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=157407&r1=157406&r2=157407&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original) >> +++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Thu May 24 13:29:41 2012 >> @@ -1415,7 +1415,8 @@ >> return ExprError(); >> >> // Search for a declared property first. >> - if (ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration(Member)) { >> + ObjCPropertyDecl *PD = IFace->FindPropertyDeclaration(Member); >> + if (PD) { >> // Check whether we can reference this property. >> if (DiagnoseUseOfDecl(PD, MemberLoc)) >> return ExprError(); >> @@ -1483,6 +1484,10 @@ >> SelectorTable::constructSetterName(PP.getIdentifierTable(), >> PP.getSelectorTable(), Member); >> ObjCMethodDecl *Setter = IFace->lookupInstanceMethod(SetterSel); >> + // Check for corner case of: @property int p; ... self.P = 0; >> + // setter name is synthesized "setP" but there is no property name 'P'. >> + if (Setter && Setter->isSynthesized() && !PD) >> + Setter = 0; >> >> // May be founf in property's qualified list. >> if (!Setter) >> >> Modified: cfe/trunk/test/SemaObjC/property-user-setter.m >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-user-setter.m?rev=157407&r1=157406&r2=157407&view=diff >> ============================================================================== >> --- cfe/trunk/test/SemaObjC/property-user-setter.m (original) >> +++ cfe/trunk/test/SemaObjC/property-user-setter.m Thu May 24 13:29:41 2012 >> @@ -102,3 +102,31 @@ >> abort (); >> return 0; >> } >> + >> +// rdar://11363363 >> +@interface rdar11363363 >> +{ >> + id R; >> +} >> +@property (copy) id p; >> +@property (copy) id r; >> +@property (copy) id Q; >> +@property (copy) id t; >> +@property (copy) id T; >> +@end >> + >> +@implementation rdar11363363 >> +@synthesize p; >> +@synthesize r; >> +@synthesize Q; >> +@synthesize t, T; >> +- (id) Meth { >> + self.P = 0; // expected-error {{property 'P' not found on object of type >> 'rdar11363363 *'}} >> + self.q = 0; // expected-error {{property 'q' not found on object of type >> 'rdar11363363 *'}} >> + self.t = 0; // OK >> + self.T = 0; // OK >> + self.R = 0; // expected-error {{property 'R' not found on object of type >> 'rdar11363363 *'; did you mean to access ivar 'R'?}} >> + return self.R; // expected-error {{property 'R' not found on object of >> type 'rdar11363363 *'; did you mean to access ivar 'R'?}} >> +} >> +@end >> + >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
