[cfe-commits] r116104 - in /cfe/trunk: clang.xcodeproj/project.pbxproj lib/Rewrite/RewriteObjC.cpp test/Rewriter/rewrite-property-set-cfstring.mm

Fariborz Jahanian fjahanian at apple.com
Fri Oct 8 14:12:22 PDT 2010


Author: fjahanian
Date: Fri Oct  8 16:12:22 2010
New Revision: 116104

URL: http://llvm.org/viewvc/llvm-project?rev=116104&view=rev
Log:
When dealing with an assignment with LHS being a property reference
expression, the entire assignment tree is rewritten into a property
setter messaging. This includes rewriting the RHS. 
Do not attempt to rewrite RHS again. Never rewrite a rewritten text!
Fixes //rdar: //8527018.

Added:
    cfe/trunk/test/Rewriter/rewrite-property-set-cfstring.mm
Modified:
    cfe/trunk/clang.xcodeproj/project.pbxproj
    cfe/trunk/lib/Rewrite/RewriteObjC.cpp

Modified: cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=116104&r1=116103&r2=116104&view=diff
==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Fri Oct  8 16:12:22 2010
@@ -1102,6 +1102,7 @@
 				9012911C1048068D0083456D /* ASTUnit.cpp */,
 				1A2A54A50FD1DD1C00F4CE45 /* ASTConsumers.cpp */,
 				1A2A54A70FD1DD1C00F4CE45 /* CacheTokens.cpp */,
+				DE4DC7A20EA1C33E00069E5A /* TokenRewriter.cpp */,
 				1ACB57DB1105820D0047B991 /* CompilerInstance.cpp */,
 				1ACB57DC1105820D0047B991 /* CompilerInvocation.cpp */,
 				1ACB57DD1105820D0047B991 /* DeclXML.cpp */,
@@ -2006,7 +2007,6 @@
 				72D16C1E0D9975C400E6DA4A /* HTMLRewrite.cpp */,
 				DEF7D9F80C9C8B1D0001F598 /* Rewriter.cpp */,
 				DECAB0CF0DB3C84200E13CCB /* RewriteRope.cpp */,
-				DE4DC7A20EA1C33E00069E5A /* TokenRewriter.cpp */,
 			);
 			name = Rewrite;
 			sourceTree = "<group>";

Modified: cfe/trunk/lib/Rewrite/RewriteObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/RewriteObjC.cpp?rev=116104&r1=116103&r2=116104&view=diff
==============================================================================
--- cfe/trunk/lib/Rewrite/RewriteObjC.cpp (original)
+++ cfe/trunk/lib/Rewrite/RewriteObjC.cpp Fri Oct  8 16:12:22 2010
@@ -5363,6 +5363,15 @@
         newStmt = RewriteFunctionBodyOrGlobalInitializer(S);
       if (newStmt)
         *CI = newStmt;
+      // If dealing with an assignment with LHS being a property reference
+      // expression, the entire assignment tree is rewritten into a property
+      // setter messaging. This involvs the RHS too. Do not attempt to rewrite
+      // RHS again.
+      if (ObjCPropertyRefExpr *PRE = dyn_cast<ObjCPropertyRefExpr>(S))
+        if (PropSetters[PRE]) {
+          ++CI;
+          continue;
+        }
     }
 
   if (BlockExpr *BE = dyn_cast<BlockExpr>(S)) {

Added: cfe/trunk/test/Rewriter/rewrite-property-set-cfstring.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/rewrite-property-set-cfstring.mm?rev=116104&view=auto
==============================================================================
--- cfe/trunk/test/Rewriter/rewrite-property-set-cfstring.mm (added)
+++ cfe/trunk/test/Rewriter/rewrite-property-set-cfstring.mm Fri Oct  8 16:12:22 2010
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
+// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
+// rdar:// 8527018
+
+void *sel_registerName(const char *);
+
+ at class NSString;
+ at interface CoreDAVDiscoveryAccountInfo  {
+  NSString *_scheme;
+}
+ at property (retain) NSString *scheme;
+- (void) Meth ;
+ at end
+
+ at implementation CoreDAVDiscoveryAccountInfo
+ at synthesize scheme=_scheme;
+- (void) Meth {
+  CoreDAVDiscoveryAccountInfo *discoveryInfo;
+  discoveryInfo.scheme = @"https";
+}
+ at end





More information about the cfe-commits mailing list