From 2ccc0f9c23e6b948a4db6ffe46aefa098e1a2956 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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158153 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExpr.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/CodeGen/CGExpr.cpp') diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 190855d3a0..5d1890635e 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/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-70-g09d2