diff options
author | Chris Lattner <sabre@nondot.org> | 2007-12-17 05:17:42 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-12-17 05:17:42 +0000 |
commit | 0113edd5a61d3c1682379b89819566acf5415e89 (patch) | |
tree | db507988159f1a434c0c3dc220bc38f4dfc3721f /CodeGen/CodeGenModule.cpp | |
parent | ddc23f3e6fdc4f83dd46ef7e20394cfbd6063ff9 (diff) |
add a hack so that codegen doesn't abort on missing sema of initializers, now
we emit stuff like this:
abort on missing sema of initializers, now
we emit stuff like this:
t3.c:1:24: warning: cannot codegen this initializer yet
const char x[2][4] = { { 'a', 'b', '\0', '\0' }, { 'c', 'd', 'e', '\0' } };
^~~~~~~~~~~~~~~~~~~~~~~~
This should be removed when sema is finished.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45086 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenModule.cpp')
-rw-r--r-- | CodeGen/CodeGenModule.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp index ea908d398c..76bf40353a 100644 --- a/CodeGen/CodeGenModule.cpp +++ b/CodeGen/CodeGenModule.cpp @@ -281,7 +281,15 @@ static llvm::Constant *GenerateConstantCast(const Expr *Expression, /// struct typed variables. static llvm::Constant *GenerateAggregateInit(const InitListExpr *ILE, CodeGenModule &CGM) { - assert (ILE->getType()->isArrayType() || ILE->getType()->isStructureType()); + if (ILE->getType()->isVoidType()) { + // FIXME: Remove this when sema of initializers is finished (and the code + // below). + CGM.WarnUnsupported(ILE, "initializer"); + return 0; + } + + assert((ILE->getType()->isArrayType() || ILE->getType()->isStructureType()) && + "Bad type for init list!"); CodeGenTypes& Types = CGM.getTypes(); unsigned NumInitElements = ILE->getNumInits(); @@ -309,6 +317,12 @@ static llvm::Constant *GenerateAggregateInit(const InitListExpr *ILE, unsigned i = 0; for (i = 0; i < NumInitableElts; ++i) { llvm::Constant *C = GenerateConstantExpr(ILE->getInit(i), CGM); + // FIXME: Remove this when sema of initializers is finished (and the code + // above). + if (C == 0 && ILE->getInit(i)->getType()->isVoidType()) { + if (ILE->getType()->isVoidType()) return 0; + return llvm::UndefValue::get(CType); + } assert (C && "Failed to create initialiser expression"); Elts.push_back(C); } |