[cfe-commits] r154667 - in /cfe/trunk: lib/Sema/SemaPseudoObject.cpp test/SemaObjCXX/property-reference.mm

jahanian fjahanian at apple.com
Fri Apr 13 08:57:36 PDT 2012


On Apr 13, 2012, at 8:53 AM, Douglas Gregor wrote:

> Author: dgregor
> Date: Fri Apr 13 10:53:08 2012
> New Revision: 154667
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=154667&view=rev
> Log:
> super and class property reference expressions don't need to be
> rebuilt. Fixes <rdar://problem/11052352>. 

Please add a test for 'super' reference as well.

- Fariborz

> 
> 
> Modified:
>    cfe/trunk/lib/Sema/SemaPseudoObject.cpp
>    cfe/trunk/test/SemaObjCXX/property-reference.mm
> 
> Modified: cfe/trunk/lib/Sema/SemaPseudoObject.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaPseudoObject.cpp?rev=154667&r1=154666&r2=154667&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaPseudoObject.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaPseudoObject.cpp Fri Apr 13 10:53:08 2012
> @@ -1300,8 +1300,13 @@
>   Expr *opaqueRef = E->IgnoreParens();
>   if (ObjCPropertyRefExpr *refExpr
>         = dyn_cast<ObjCPropertyRefExpr>(opaqueRef)) {
> -    OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBase());
> -    return ObjCPropertyRefRebuilder(S, baseOVE->getSourceExpr()).rebuild(E);
> +    if (refExpr->isObjectReceiver()) {
> +      OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBase());
> +      return ObjCPropertyRefRebuilder(S, baseOVE->getSourceExpr()).rebuild(E);
> +    }
> +
> +    // Neither class or super property references need a rebuild.
> +    return E;
>   } else if (ObjCSubscriptRefExpr *refExpr
>                = dyn_cast<ObjCSubscriptRefExpr>(opaqueRef)) {
>     OpaqueValueExpr *baseOVE = cast<OpaqueValueExpr>(refExpr->getBaseExpr());
> 
> Modified: cfe/trunk/test/SemaObjCXX/property-reference.mm
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/property-reference.mm?rev=154667&r1=154666&r2=154667&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjCXX/property-reference.mm (original)
> +++ cfe/trunk/test/SemaObjCXX/property-reference.mm Fri Apr 13 10:53:08 2012
> @@ -42,3 +42,18 @@
> 	cppObjectNonAtomic = cppObject;
> }
> @end
> +
> +
> +// <rdar://problem/11052352>
> + at interface NSObject
> ++ alloc;
> +- init;
> +- class;
> + at end
> +
> +template<typename T> void f() {
> +  NSObject *o = [NSObject.alloc init];
> +  [o class];
> +}
> +
> +template void f<int>();
> 
> 
> _______________________________________________
> 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