summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-06-07 17:07:15 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-06-07 17:07:15 +0000
commitbbc5bbf4f1015a1aab068adb4dedc444586aaf21 (patch)
tree613d8f880bf3945c865410a6b38863a54efbc3d5 /clang/lib/CodeGen
parent5d4cff72b4c0e2c3cbb3f784c869d5b68427208f (diff)
downloadbcm5719-llvm-bbc5bbf4f1015a1aab068adb4dedc444586aaf21.tar.gz
bcm5719-llvm-bbc5bbf4f1015a1aab068adb4dedc444586aaf21.zip
When emitting compund literal of vla pointer elements, make
sure to emit vla size to prevent an irgen crash. // rdar://11485774 llvm-svn: 158153
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 190855d3a0d..5d1890635e0 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -2114,7 +2114,11 @@ LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){
llvm::Value *GlobalPtr = CGM.GetAddrOfConstantCompoundLiteral(E);
return MakeAddrLValue(GlobalPtr, E->getType());
}
-
+ if (const PointerType *pointerType = E->getType()->getAs<PointerType>())
+ if (pointerType->getPointeeType()->isVariableArrayType())
+ // make sure to emit the VLA size.
+ EmitVariablyModifiedType(pointerType->getPointeeType());
+
llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral");
const Expr *InitExpr = E->getInitializer();
LValue Result = MakeAddrLValue(DeclPtr, E->getType());
OpenPOWER on IntegriCloud