diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-01-26 23:08:27 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-01-26 23:08:27 +0000 |
commit | 2f2fa7284bd949310b69692cbca921bbdac956a0 (patch) | |
tree | 8b240cd158892162850ccc42814b41f5991cc2f2 /clang/lib/CodeGen/CGExpr.cpp | |
parent | fb4ee9bbde8b3f1511f245eaef996f3fcc3e4d6b (diff) | |
download | bcm5719-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.cpp | 9 |
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"); |