diff options
| author | Balaji V. Iyer <bviyer@gmail.com> | 2018-08-08 00:01:21 +0000 |
|---|---|---|
| committer | Balaji V. Iyer <bviyer@gmail.com> | 2018-08-08 00:01:21 +0000 |
| commit | 749e8285a5dd8a59db309bbef8239f709ab5b43e (patch) | |
| tree | 2a7a149896a6d7c61c88f86f3cafd063dfa7eabf /clang/lib/CodeGen | |
| parent | 6504d4390ff58501a0d07cd66eb0009143f64666 (diff) | |
| download | bcm5719-llvm-749e8285a5dd8a59db309bbef8239f709ab5b43e.tar.gz bcm5719-llvm-749e8285a5dd8a59db309bbef8239f709ab5b43e.zip | |
[CodeGen] IncompleteArray Support
Added code to support ArrayType that is not ConstantArray.
https://reviews.llvm.org/D49952
rdar://42476155
llvm-svn: 339207
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGExprConstant.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp index 68766479a53..651b05a26f7 100644 --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -1968,6 +1968,16 @@ llvm::Constant *ConstantEmitter::tryEmitPrivate(const APValue &Value, Elts.push_back(C); } + // This means that the array type is probably "IncompleteType" or some + // type that is not ConstantArray. + if (CAT == nullptr && CommonElementType == nullptr && !NumInitElts) { + const ArrayType *AT = CGM.getContext().getAsArrayType(DestType); + CommonElementType = CGM.getTypes().ConvertType(AT->getElementType()); + llvm::ArrayType *AType = llvm::ArrayType::get(CommonElementType, + NumElements); + return llvm::ConstantAggregateZero::get(AType); + } + return EmitArrayConstant(CGM, CAT, CommonElementType, NumElements, Elts, Filler); } |

