diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-12-23 20:32:38 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-12-23 20:32:38 +0000 |
commit | cbdcfe802a756246c1fa651101c78d10fdcce2f0 (patch) | |
tree | ed8e9ff9eda9618433ee36628621bb8dc2086397 | |
parent | 069857ea3197ed02630f35ffa08eb7a53b687ac9 (diff) | |
download | bcm5719-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.cpp | 12 |
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; |