]> granicus.if.org Git - clang/commitdiff
Fix <rdar://problem/6445502> clang ObjC rewriter: _Block_release has wrong parameter...
authorSteve Naroff <snaroff@apple.com>
Tue, 16 Dec 2008 15:50:30 +0000 (15:50 +0000)
committerSteve Naroff <snaroff@apple.com>
Tue, 16 Dec 2008 15:50:30 +0000 (15:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61088 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/RewriteObjC.cpp

index aaaa0c6689858fb8e16913d72e0aa6d5d66cd9b1..8828c1c2d352d59686d9d887e3edf86f9436ae8c 100644 (file)
@@ -537,13 +537,11 @@ void RewriteObjC::Initialize(ASTContext &context) {
   Preamble += "  int Size;\n";
   Preamble += "  void *FuncPtr;\n";
   Preamble += "};\n";
-  Preamble += "// Runtime copy/destroy helper functions\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void _Block_copy_assign(void *, void *);\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void _Block_byref_assign_copy(void *, void *);\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void _Block_release(void *);\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void _Block_byref_release(void *);\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void *_NSConcreteGlobalBlock;\n";
-  Preamble += "__OBJC_RW_STATICIMPORT void *_NSConcreteStackBlock;\n";
+  Preamble += "// Runtime copy/destroy helper functions (from Block_private.h)\n";
+  Preamble += "__OBJC_RW_STATICIMPORT void _Block_object_assign(void *, const void *, const int);\n";
+  Preamble += "__OBJC_RW_STATICIMPORT void _Block_object_dispose(const void *, const int);\n";
+  Preamble += "__OBJC_RW_STATICIMPORT void *_NSConcreteGlobalBlock[32];\n";
+  Preamble += "__OBJC_RW_STATICIMPORT void *_NSConcreteStackBlock[32];\n";
   Preamble += "#endif\n";
   if (LangOpts.Microsoft) {
     Preamble += "#undef __OBJC_RW_DLLIMPORT\n";
@@ -3516,11 +3514,11 @@ std::string RewriteObjC::SynthesizeBlockHelperFuncs(BlockExpr *CE, int i,
   S += "*src) {";
   for (llvm::SmallPtrSet<ValueDecl*,8>::iterator I = ImportedBlockDecls.begin(), 
       E = ImportedBlockDecls.end(); I != E; ++I) {
-    S += "_Block_copy_assign((void*)&dst->";
+    S += "_Block_object_assign((void*)&dst->";
     S += (*I)->getNameAsString();
     S += ", (void*)src->";
     S += (*I)->getNameAsString();
-    S += ");}";
+    S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);}";
   }
   S += "\nstatic void __";
   S += funcName;
@@ -3529,9 +3527,9 @@ std::string RewriteObjC::SynthesizeBlockHelperFuncs(BlockExpr *CE, int i,
   S += "*src) {";
   for (llvm::SmallPtrSet<ValueDecl*,8>::iterator I = ImportedBlockDecls.begin(), 
       E = ImportedBlockDecls.end(); I != E; ++I) {
-    S += "_Block_release((void*)src->";
+    S += "_Block_object_dispose((void*)src->";
     S += (*I)->getNameAsString();
-    S += ");";
+    S += ", 3/*BLOCK_FIELD_IS_OBJECT*/);";
   }
   S += "}\n";  
   return S;