Support checking and codegen of constant vector globals



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46343 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index bb61dc7..e841ee5 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -300,7 +300,8 @@
     return 0;
   }
   
-  assert((ILE->getType()->isArrayType() || ILE->getType()->isStructureType()) &&
+  assert((ILE->getType()->isArrayType() || ILE->getType()->isStructureType() ||
+          ILE->getType()->isVectorType()) &&
          "Bad type for init list!");
   CodeGenTypes& Types = CGM.getTypes();
 
@@ -342,6 +343,9 @@
   if (ILE->getType()->isStructureType())
     return llvm::ConstantStruct::get(cast<llvm::StructType>(CType), Elts);
 
+  if (ILE->getType()->isVectorType())
+    return llvm::ConstantVector::get(cast<llvm::VectorType>(CType), Elts);
+
   // Make sure we have an array at this point
   assert(AType);
 
@@ -417,6 +421,12 @@
     return llvm::ConstantArray::get(Str, false);
   }
 
+  // Generate initializer for the CompoundLiteral
+  case Stmt::CompoundLiteralExprClass: {
+    const CompoundLiteralExpr *CLE = cast<CompoundLiteralExpr>(Expression);
+    return GenerateConstantExpr(CLE->getInitializer(), CGM);
+  }
+
   // Elide parenthesis.
   case Stmt::ParenExprClass:
     return GenerateConstantExpr(cast<ParenExpr>(Expression)->getSubExpr(), CGM);