[cfe-commits] r115644 - in /cfe/trunk: clang.xcodeproj/project.pbxproj lib/Rewrite/RewriteObjC.cpp test/Rewriter/rewrite-nested-blocks-2.mm

Fariborz Jahanian fjahanian at apple.com
Tue Oct 5 11:05:06 PDT 2010


Author: fjahanian
Date: Tue Oct  5 13:05:06 2010
New Revision: 115644

URL: http://llvm.org/viewvc/llvm-project?rev=115644&view=rev
Log:
Fix a block rewriter bug where copy/dispose entries in 
block descriptor for outer block was missing even though
the block was importing objects into its inner blocks.
//rdar://84995992

Added:
    cfe/trunk/test/Rewriter/rewrite-nested-blocks-2.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=115644&r1=115643&r2=115644&view=diff
==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Tue Oct  5 13:05:06 2010
@@ -2039,7 +2039,6 @@
 			isa = PBXProject;
 			buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
 			compatibilityVersion = "Xcode 2.4";
-			developmentRegion = English;
 			hasScannedForEncodings = 1;
 			knownRegions = (
 				English,

Modified: cfe/trunk/lib/Rewrite/RewriteObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/RewriteObjC.cpp?rev=115644&r1=115643&r2=115644&view=diff
==============================================================================
--- cfe/trunk/lib/Rewrite/RewriteObjC.cpp (original)
+++ cfe/trunk/lib/Rewrite/RewriteObjC.cpp Tue Oct  5 13:05:06 2010
@@ -4381,6 +4381,12 @@
         BlockByRefDeclsPtrSet.insert(VD);
         BlockByRefDecls.push_back(VD);
       }
+      // imported objects in the inner blocks not used in the outer
+      // blocks must be copied/disposed in the outer block as well.
+      if (Exp->isByRef() ||
+          VD->getType()->isObjCObjectPointerType() || 
+          VD->getType()->isBlockPointerType())
+        ImportedBlockDecls.insert(VD);
     }
 
     std::string ImplTag = "__" + FunName.str() + "_block_impl_" + utostr(i);

Added: cfe/trunk/test/Rewriter/rewrite-nested-blocks-2.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/rewrite-nested-blocks-2.mm?rev=115644&view=auto
==============================================================================
--- cfe/trunk/test/Rewriter/rewrite-nested-blocks-2.mm (added)
+++ cfe/trunk/test/Rewriter/rewrite-nested-blocks-2.mm Tue Oct  5 13:05:06 2010
@@ -0,0 +1,18 @@
+// 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
+// grep "static void __FUNC_block_copy_" %t-rw.cpp | count 2
+// rdar://8499592
+
+void Outer(void (^bk)());
+void Inner(void (^bk)());
+void INNER_FUNC(id d);
+
+void FUNC() {
+    
+    id bar = (id)42;
+    Outer(^{
+        Inner(^{
+            INNER_FUNC(bar);
+        });
+    });    
+}





More information about the cfe-commits mailing list