mirror of
https://github.com/intel/llvm.git
synced 2026-01-31 07:27:33 +08:00
[CodeGen] IncompleteArray Support
Added code to support ArrayType that is not ConstantArray. https://reviews.llvm.org/D49952 rdar://42476155 llvm-svn: 339207
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
12
clang/test/CodeGenCXX/empty-struct-init-list.cpp
Normal file
12
clang/test/CodeGenCXX/empty-struct-init-list.cpp
Normal file
@@ -0,0 +1,12 @@
|
||||
// RUN: %clang_cc1 -std=c++11 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++14 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -std=c++17 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK: struct.a
|
||||
typedef struct { } a;
|
||||
typedef struct {
|
||||
a b[];
|
||||
} c;
|
||||
|
||||
// CHECK: global %struct.c zeroinitializer, align 1
|
||||
c d{ };
|
||||
Reference in New Issue
Block a user