[cfe-commits] r157407 - in /cfe/trunk: lib/Sema/SemaExprObjC.cpp test/SemaObjC/property-user-setter.m

jahanian fjahanian at apple.com
Thu May 24 11:46:13 PDT 2012


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
>> + at interface rdar11363363
>> +{
>> +  id R;
>> +}
>> + at property (copy) id p;
>> + at property (copy) id r;
>> + at property (copy) id Q;
>> + at property (copy) id t;
>> + at property (copy) id T;
>> + at end
>> +
>> + at implementation rdar11363363
>> + at synthesize p;
>> + at synthesize r;
>> + at synthesize Q;
>> + at 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'?}}
>> +}
>> + at end
>> +
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 




More information about the cfe-commits mailing list