summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-01-26 23:08:27 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-01-26 23:08:27 +0000
commit2f2fa7284bd949310b69692cbca921bbdac956a0 (patch)
tree8b240cd158892162850ccc42814b41f5991cc2f2 /clang/lib/CodeGen/CGExpr.cpp
parentfb4ee9bbde8b3f1511f245eaef996f3fcc3e4d6b (diff)
downloadbcm5719-llvm-2f2fa7284bd949310b69692cbca921bbdac956a0.tar.gz
bcm5719-llvm-2f2fa7284bd949310b69692cbca921bbdac956a0.zip
Fixes an IRgen bug where __block variable is
referenced in the block-literal initializer of that variable. // rdar://8893785 llvm-svn: 124332
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index afc1e0709ed..ca80d3dd38e 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -1164,12 +1164,9 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
V = CGM.getStaticLocalDeclAddress(VD);
assert(V && "DeclRefExpr not entered in LocalDeclMap?");
- if (VD->hasAttr<BlocksAttr>()) {
- V = Builder.CreateStructGEP(V, 1, "forwarding");
- V = Builder.CreateLoad(V);
- V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD),
- VD->getNameAsString());
- }
+ if (VD->hasAttr<BlocksAttr>())
+ V = BuildBlockByrefAddress(V, VD);
+
if (VD->getType()->isReferenceType())
V = Builder.CreateLoad(V, "tmp");
OpenPOWER on IntegriCloud