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

Jordy Rose jediknil at belkadan.com
Thu May 24 11:37:17 PDT 2012


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.


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