diff options
| author | Mike Stump <mrs@apple.com> | 2009-02-19 22:01:56 +0000 |
|---|---|---|
| committer | Mike Stump <mrs@apple.com> | 2009-02-19 22:01:56 +0000 |
| commit | a67033294a028a9a33530bb3454758ba33acd842 (patch) | |
| tree | c88ffd51d4c57b31624943d53efb26c3e80fb9c1 /clang/lib/CodeGen | |
| parent | a118a0715779a8ec73d254b28169349a4ca4fe54 (diff) | |
| download | bcm5719-llvm-a67033294a028a9a33530bb3454758ba33acd842.tar.gz bcm5719-llvm-a67033294a028a9a33530bb3454758ba33acd842.zip | |
Add enough checking to ensure that non-constant block literals don't
appear to be constant. I'll probably redo this and throw it all away
later once we have codegen for BlockDeclRefExprs.
llvm-svn: 65070
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGExprConstant.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 523014f1fb1..8cfd60ce5c5 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -382,6 +382,8 @@ public: } llvm::Constant *VisitBlockExpr(const BlockExpr *E) { + assert (!E->hasBlockDeclRefExprs() && "global block with BlockDeclRefs"); + const char *Name = ""; if (const NamedDecl *ND = dyn_cast<NamedDecl>(CGF->CurFuncDecl)) Name = ND->getNameAsString().c_str(); @@ -615,7 +617,9 @@ public: return CGM.GetAddrOfConstantCFString(S); } case Expr::BlockExprClass: { - return CGF->BuildBlockLiteralTmp(cast<BlockExpr>(E)); + BlockExpr *B = cast<BlockExpr>(E); + if (!B->hasBlockDeclRefExprs()) + return CGF->BuildBlockLiteralTmp(B); } } |

