diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-12-04 21:22:13 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-12-04 21:22:13 +0000 |
commit | 3cd1ea32c312dee47432dbb982f83bccff7356ac (patch) | |
tree | 2c4680dd645b61d8c04173d35815e59701521945 | |
parent | fd569004b78124c1041feee75a1e311166268c8d (diff) |
Fix rewriter to match recent changes in property ref
AST.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120919 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Rewrite/RewriteObjC.cpp | 14 | ||||
-rw-r--r-- | test/Rewriter/properties.m | 8 | ||||
-rwxr-xr-x | test/Rewriter/rewrite-nested-property-in-blocks.mm | 4 |
3 files changed, 14 insertions, 12 deletions
diff --git a/lib/Rewrite/RewriteObjC.cpp b/lib/Rewrite/RewriteObjC.cpp index 286ac0f638..d689f22f68 100644 --- a/lib/Rewrite/RewriteObjC.cpp +++ b/lib/Rewrite/RewriteObjC.cpp @@ -1361,12 +1361,20 @@ Stmt *RewriteObjC::RewritePropertyOrImplicitGetter(Expr *PropOrGetterRefExpr) { if (!PropParentMap) PropParentMap = new ParentMap(CurrentBody); - + bool NestedPropertyRef = false; Stmt *Parent = PropParentMap->getParent(PropOrGetterRefExpr); - if (Parent && isa<ObjCPropertyRefExpr>(Parent)) { + ImplicitCastExpr*ICE=0; + if (Parent) + if ((ICE = dyn_cast<ImplicitCastExpr>(Parent))) { + assert((ICE->getCastKind() == CK_GetObjCProperty) + && "RewritePropertyOrImplicitGetter"); + Parent = PropParentMap->getParent(Parent); + NestedPropertyRef = (Parent && isa<ObjCPropertyRefExpr>(Parent)); + } + if (NestedPropertyRef) { // We stash away the ReplacingStmt since actually doing the // replacement/rewrite won't work for nested getters (e.g. obj.p.i) - PropGetters[PropOrGetterRefExpr] = ReplacingStmt; + PropGetters[ICE] = ReplacingStmt; // NOTE: We don't want to call MsgExpr->Destroy(), as it holds references // to things that stay around. Context->Deallocate(MsgExpr); diff --git a/test/Rewriter/properties.m b/test/Rewriter/properties.m index bfc8dc124b..89177d7e64 100644 --- a/test/Rewriter/properties.m +++ b/test/Rewriter/properties.m @@ -1,9 +1,7 @@ -// RUN: %clang_cc1 -rewrite-objc %s -o - +// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp +// RUN: %clang_cc1 -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp -// Fariborz approved this being xfail'ed during the addition -// of explicit lvalue-to-rvalue conversions. -// RUN: false -// XFAIL: * +void *sel_registerName(const char *); @interface Foo { int i; diff --git a/test/Rewriter/rewrite-nested-property-in-blocks.mm b/test/Rewriter/rewrite-nested-property-in-blocks.mm index 348858ccc1..2dffe66ab3 100755 --- a/test/Rewriter/rewrite-nested-property-in-blocks.mm +++ b/test/Rewriter/rewrite-nested-property-in-blocks.mm @@ -2,10 +2,6 @@ // RUN: %clang_cc1 -fsyntax-only -fms-extensions -Wno-address-of-temporary -Did="void *" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 8608293 -// Fariborz approved this being xfail'ed during the addition -// of explicit lvalue-to-rvalue conversions. -// XFAIL: * - void *sel_registerName(const char *); extern "C" void nowarn(id); |