From d47d4f518e43eaa716e2d18359bd725a03b87f58 Mon Sep 17 00:00:00 2001 From: Nate Begeman Date: Fri, 25 Jan 2008 05:34:48 +0000 Subject: 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 --- CodeGen/CodeGenModule.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'CodeGen/CodeGenModule.cpp') diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp index bb61dc7cd8..e841ee5492 100644 --- a/CodeGen/CodeGenModule.cpp +++ b/CodeGen/CodeGenModule.cpp @@ -300,7 +300,8 @@ static llvm::Constant *GenerateAggregateInit(const InitListExpr *ILE, 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 @@ static llvm::Constant *GenerateAggregateInit(const InitListExpr *ILE, if (ILE->getType()->isStructureType()) return llvm::ConstantStruct::get(cast(CType), Elts); + if (ILE->getType()->isVectorType()) + return llvm::ConstantVector::get(cast(CType), Elts); + // Make sure we have an array at this point assert(AType); @@ -417,6 +421,12 @@ static llvm::Constant *GenerateConstantExpr(const Expr *Expression, return llvm::ConstantArray::get(Str, false); } + // Generate initializer for the CompoundLiteral + case Stmt::CompoundLiteralExprClass: { + const CompoundLiteralExpr *CLE = cast(Expression); + return GenerateConstantExpr(CLE->getInitializer(), CGM); + } + // Elide parenthesis. case Stmt::ParenExprClass: return GenerateConstantExpr(cast(Expression)->getSubExpr(), CGM); -- cgit v1.2.3-70-g09d2