From bbc5bbf4f1015a1aab068adb4dedc444586aaf21 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 7 Jun 2012 17:07:15 +0000 Subject: When emitting compund literal of vla pointer elements, make sure to emit vla size to prevent an irgen crash. // rdar://11485774 llvm-svn: 158153 --- clang/lib/CodeGen/CGExpr.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'clang/lib/CodeGen') 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()) + 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()); -- cgit v1.2.3