diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2010-11-11 00:11:38 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-11-11 00:11:38 +0000 |
| commit | 2a5deb56a4c70b47919a84f3088b5d064caca401 (patch) | |
| tree | bddd238e3be5d64de03aba24f1154fac9abefb7b /clang/lib/CodeGen | |
| parent | b057cf81469ae46a26b1ace35ed9c7b98aefe822 (diff) | |
| download | bcm5719-llvm-2a5deb56a4c70b47919a84f3088b5d064caca401.tar.gz bcm5719-llvm-2a5deb56a4c70b47919a84f3088b5d064caca401.zip | |
Adding couple of Block API, a bug fix and
a test change, all for blocks. wip.
llvm-svn: 118745
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CGBlocks.h | 6 |
2 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index 44e0833daf5..33646871e08 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -311,11 +311,10 @@ llvm::Value *CodeGenFunction::BuildBlockLiteralTmp(const BlockExpr *BE) { } const BlockDeclRefExpr *BDRE = cast<BlockDeclRefExpr>(E); + Note.RequiresCopying = BlockRequiresCopying(BDRE); + const ValueDecl *VD = BDRE->getDecl(); QualType T = VD->getType(); - - Note.RequiresCopying = BlockRequiresCopying(T); - if (BDRE->isByRef()) { Note.flag = BLOCK_FIELD_IS_BYREF; if (T.isObjCGCWeak()) @@ -563,7 +562,7 @@ void CodeGenFunction::AllocateBlockDecl(const BlockDeclRefExpr *E) { // Don't run the expensive check, unless we have to. if (!BlockHasCopyDispose) if (E->isByRef() - || BlockRequiresCopying(E->getType())) + || BlockRequiresCopying(E)) BlockHasCopyDispose = true; const ValueDecl *D = cast<ValueDecl>(E->getDecl()); diff --git a/clang/lib/CodeGen/CGBlocks.h b/clang/lib/CodeGen/CGBlocks.h index 743e3c83be3..ce721a46408 100644 --- a/clang/lib/CodeGen/CGBlocks.h +++ b/clang/lib/CodeGen/CGBlocks.h @@ -103,6 +103,9 @@ public: bool BlockRequiresCopying(QualType Ty) { return getContext().BlockRequiresCopying(Ty); } + bool BlockRequiresCopying(const BlockDeclRefExpr *E) + { return E->getCopyConstructorExpr() != 0 || + getContext().BlockRequiresCopying(E->getType()); } }; class BlockFunction : public BlockBase { @@ -197,6 +200,9 @@ public: bool BlockRequiresCopying(QualType Ty) { return getContext().BlockRequiresCopying(Ty); } + bool BlockRequiresCopying(const BlockDeclRefExpr *E) + { return E->getCopyConstructorExpr() != 0 || + getContext().BlockRequiresCopying(E->getType()); } }; } // end namespace CodeGen |

