[PATCH] D49952: Check for NULL Destination-Type when creating ArrayConstant
Balaji Iyer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 31 14:59:20 PDT 2018
bviyer updated this revision to Diff 158392.
bviyer added a comment.
Forgot to pass the -emit-llvm to the test case.
https://reviews.llvm.org/D49952
Files:
lib/CodeGen/CGExprConstant.cpp
test/CodeGenCXX/empty-struct-init-list.cpp
Index: test/CodeGenCXX/empty-struct-init-list.cpp
===================================================================
--- /dev/null
+++ test/CodeGenCXX/empty-struct-init-list.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -std=c++11 -emit-llvm %s
+// RUN: %clang_cc1 -std=c++14 -emit-llvm %s
+// RUN: %clang_cc1 -std=c++17 -emit-llvm %s
+// expected-no-diagnostics
+
+typedef struct { } a;
+
+typedef struct {
+ a b[];
+} c;
+c d{ };
Index: lib/CodeGen/CGExprConstant.cpp
===================================================================
--- lib/CodeGen/CGExprConstant.cpp
+++ lib/CodeGen/CGExprConstant.cpp
@@ -2119,6 +2119,16 @@
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);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49952.158392.patch
Type: text/x-patch
Size: 1332 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180731/2e7b1f30/attachment.bin>
More information about the cfe-commits
mailing list