Handle non-constant initializers.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43301 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CGExprScalar.cpp b/CodeGen/CGExprScalar.cpp
index d23473a..4b45980 100644
--- a/CodeGen/CGExprScalar.cpp
+++ b/CodeGen/CGExprScalar.cpp
@@ -121,14 +121,15 @@
   Value *VisitPreDefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
 
   Value *VisitInitListExpr(InitListExpr *E) {
-    std::vector<llvm::Constant *> Elements;
     unsigned N = E->getNumInits();
+    QualType T = E->getInit(0)->getType();
+    Value *V = llvm::UndefValue::get(llvm::VectorType::get(ConvertType(T), N));
     for (unsigned i = 0; i < N; ++i) {
-      Value *V = Visit(E->getInit(i));
-      llvm::Constant * C = cast<llvm::Constant>(V);
-      Elements.push_back(C);
+      Value *NewV = Visit(E->getInit(i));
+      Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
+      V = Builder.CreateInsertElement(V, NewV, Idx);
     }
-    return llvm::ConstantVector::get(Elements);
+    return V;
   }
 
   Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {