]> granicus.if.org Git - clang/commitdiff
This patch concludes rewriteing of __block variables to allow
authorFariborz Jahanian <fjahanian@apple.com>
Wed, 23 Dec 2009 20:32:38 +0000 (20:32 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Wed, 23 Dec 2009 20:32:38 +0000 (20:32 +0000)
a small test case using Block_copy(...) API to pass.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92038 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/RewriteObjC.cpp

index fb82af1fa85098d13fcda0ef5614fd7a39d2e9c6..8248eaa917f08cbd6761d177afdfb0b210d56df5 100644 (file)
@@ -3784,8 +3784,13 @@ std::string RewriteObjC::SynthesizeBlockHelperFuncs(BlockExpr *CE, int i,
     S += (*I)->getNameAsString();
     S += ", (void*)src->";
     S += (*I)->getNameAsString();
-    S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);}";
+    if (BlockByRefDecls.count((*I)))
+      S += ", 8/*BLOCK_FIELD_IS_BYREF*/);";
+    else
+      S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);";
   }
+  S += "}\n";
+  
   S += "\nstatic void __";
   S += funcName;
   S += "_block_dispose_" + utostr(i);
@@ -3795,7 +3800,10 @@ std::string RewriteObjC::SynthesizeBlockHelperFuncs(BlockExpr *CE, int i,
       E = ImportedBlockDecls.end(); I != E; ++I) {
     S += "_Block_object_dispose((void*)src->";
     S += (*I)->getNameAsString();
-    S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);";
+    if (BlockByRefDecls.count((*I)))
+      S += ", 8/*BLOCK_FIELD_IS_BYREF*/);";
+    else
+      S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);";
   }
   S += "}\n";
   return S;