aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/RewriteObjC.cpp
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
commitd25d1b53f098a4dc52469d9956bdd248ea29b38e (patch)
tree1d7badbb4d5588e892f52f994763beec22110aa2 /lib/Frontend/RewriteObjC.cpp
parent9e85c743a4cefff7386764bba3f3f2cdbe5c06e2 (diff)
This patch concludes rewriteing of __block variables to allow
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
Diffstat (limited to 'lib/Frontend/RewriteObjC.cpp')
-rw-r--r--lib/Frontend/RewriteObjC.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Frontend/RewriteObjC.cpp b/lib/Frontend/RewriteObjC.cpp
index fb82af1fa8..8248eaa917 100644
--- a/lib/Frontend/RewriteObjC.cpp
+++ b/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;