Fix constant vector init for initializer lists with an incomplete list 
of elements.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51769 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp
index ca7a580..1144cf1 100644
--- a/lib/CodeGen/CGExprConstant.cpp
+++ b/lib/CodeGen/CGExprConstant.cpp
@@ -242,20 +242,23 @@
   llvm::Constant *EmitVectorInitialization(InitListExpr *ILE) {
     const llvm::VectorType *VType =
         cast<llvm::VectorType>(ConvertType(ILE->getType()));
-    std::vector<llvm::Constant*> Elts;    
-    unsigned NumInitElements = ILE->getNumInits();      
+    const llvm::Type *ElemTy = VType->getElementType();
+    std::vector<llvm::Constant*> Elts;
     unsigned NumElements = VType->getNumElements();
+    unsigned NumInitElements = ILE->getNumInits();
 
-    // FIXME: Handle case in assertion correctly
-    assert (NumInitElements == NumElements 
-            && "Unsufficient vector init elelments");
+    unsigned NumInitableElts = std::min(NumInitElements, NumElements);
+
     // Copy initializer elements.
     unsigned i = 0;
-    for (; i < NumElements; ++i) {
+    for (; i < NumInitableElts; ++i) {
       llvm::Constant *C = Visit(ILE->getInit(i));
       Elts.push_back(C);
     }
 
+    for (; i < NumElements; ++i)
+      Elts.push_back(llvm::Constant::getNullValue(ElemTy));
+
     return llvm::ConstantVector::get(VType, Elts);    
   }