summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-12-23 20:32:38 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-12-23 20:32:38 +0000
commitcbdcfe802a756246c1fa651101c78d10fdcce2f0 (patch)
treeed8e9ff9eda9618433ee36628621bb8dc2086397
parent069857ea3197ed02630f35ffa08eb7a53b687ac9 (diff)
downloadbcm5719-llvm-cbdcfe802a756246c1fa651101c78d10fdcce2f0.tar.gz
bcm5719-llvm-cbdcfe802a756246c1fa651101c78d10fdcce2f0.zip
This patch concludes rewriteing of __block variables to allow
a small test case using Block_copy(...) API to pass. llvm-svn: 92038
-rw-r--r--clang/lib/Frontend/RewriteObjC.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Frontend/RewriteObjC.cpp b/clang/lib/Frontend/RewriteObjC.cpp
index fb82af1fa85..8248eaa917f 100644
--- a/clang/lib/Frontend/RewriteObjC.cpp
+++ b/clang/lib/Frontend/RewriteObjC.cpp
@@ -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;
OpenPOWER on IntegriCloud