diff options
Diffstat (limited to 'lib/CodeGen/CGDecl.cpp')
-rw-r--r-- | lib/CodeGen/CGDecl.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index e8f00e7dde..43077cefa0 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -970,7 +970,13 @@ void CodeGenFunction::EmitAutoVarInit(const AutoVarEmission &emission) { llvm::Value *Loc = capturedByInit ? emission.Address : emission.getObjectAddress(*this); - if (!emission.IsConstantAggregate) { + llvm::Constant *constant = 0; + if (emission.IsConstantAggregate) { + assert(!capturedByInit && "constant init contains a capturing block?"); + constant = CGM.EmitConstantExpr(D.getInit(), type, this); + } + + if (!constant) { LValue lv = MakeAddrLValue(Loc, type, alignment); lv.setNonGC(true); return EmitExprAsInit(Init, &D, lv, capturedByInit); @@ -978,13 +984,8 @@ void CodeGenFunction::EmitAutoVarInit(const AutoVarEmission &emission) { // If this is a simple aggregate initialization, we can optimize it // in various ways. - assert(!capturedByInit && "constant init contains a capturing block?"); - bool isVolatile = type.isVolatileQualified(); - llvm::Constant *constant = CGM.EmitConstantExpr(D.getInit(), type, this); - assert(constant != 0 && "Wasn't a simple constant init?"); - llvm::Value *SizeVal = llvm::ConstantInt::get(IntPtrTy, getContext().getTypeSizeInChars(type).getQuantity()); |