aboutsummaryrefslogtreecommitdiff
path: root/Driver/RewriteObjC.cpp
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-12-16 15:50:30 +0000
committerSteve Naroff <snaroff@apple.com>2008-12-16 15:50:30 +0000
commit5bc60d0c324a1b3984cd4a32acb587c8f873ab5f (patch)
treef10c91e8da7a275954d8fedc40325c57de661e30 /Driver/RewriteObjC.cpp
parent3dde5a3fa28cae4b8b2fb060abc0bfc2b4425ed8 (diff)
Fix <rdar://problem/6445502> clang ObjC rewriter: _Block_release has wrong parameter type in preamble
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61088 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/RewriteObjC.cpp')
-rw-r--r--Driver/RewriteObjC.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp
index aaaa0c6689..8828c1c2d3 100644
--- a/Driver/RewriteObjC.cpp
+++ b/Driver/RewriteObjC.cpp
@@ -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;