summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorBalaji V. Iyer <bviyer@gmail.com>2018-08-08 00:01:21 +0000
committerBalaji V. Iyer <bviyer@gmail.com>2018-08-08 00:01:21 +0000
commit749e8285a5dd8a59db309bbef8239f709ab5b43e (patch)
tree2a7a149896a6d7c61c88f86f3cafd063dfa7eabf /clang/lib/CodeGen
parent6504d4390ff58501a0d07cd66eb0009143f64666 (diff)
downloadbcm5719-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.cpp10
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);
}
OpenPOWER on IntegriCloud