diff options
author | Chris Lattner <sabre@nondot.org> | 2011-07-22 06:27:26 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-07-22 06:27:26 +0000 |
commit | 01c5d1ddc8bd589b629b8c0185c279d090bba115 (patch) | |
tree | 0fe92c4ee4f63714a551a66fc1e21e10d6c268b7 /lib/CodeGen/CodeGenTypes.cpp | |
parent | 018ec4172ee2a021dc38bb274c8b21ff610e2b44 (diff) |
fix PR10384: C++ allows external arrays of incomplete type as well.
Many thanks to Eli for reducing this great testcase.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135752 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenTypes.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index ee629ec9b0..87b3da5000 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -419,6 +419,14 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) { case Type::ConstantArray: { const ConstantArrayType *A = cast<ConstantArrayType>(Ty); llvm::Type *EltTy = ConvertTypeForMem(A->getElementType()); + + // Lower arrays of undefined struct type to arrays of i8 just to have a + // concrete type. + if (!EltTy->isSized()) { + SkippedLayout = true; + EltTy = llvm::Type::getInt8Ty(getLLVMContext()); + } + ResultType = llvm::ArrayType::get(EltTy, A->getSize().getZExtValue()); break; } |