forked from OSchip/llvm-project
Handle ConstantAggregateZero when upgrading global_ctors.
llvm-svn: 209075
This commit is contained in:
parent
6172277e9f
commit
77bbb54fbf
|
@ -191,16 +191,19 @@ static bool UpgradeGlobalStructors(GlobalVariable *GV) {
|
|||
StructType::get(GV->getContext(), Tys, /*isPacked=*/false);
|
||||
|
||||
// Build new constants with a null third field filled in.
|
||||
ConstantArray *OldInit = dyn_cast<ConstantArray>(GV->getInitializer());
|
||||
if (!OldInit)
|
||||
Constant *OldInitC = GV->getInitializer();
|
||||
ConstantArray *OldInit = dyn_cast<ConstantArray>(OldInitC);
|
||||
if (!OldInit && !isa<ConstantAggregateZero>(OldInitC))
|
||||
return false;
|
||||
std::vector<Constant *> Initializers;
|
||||
for (Use &U : OldInit->operands()) {
|
||||
ConstantStruct *Init = cast<ConstantStruct>(&U);
|
||||
Constant *NewInit =
|
||||
if (OldInit) {
|
||||
for (Use &U : OldInit->operands()) {
|
||||
ConstantStruct *Init = cast<ConstantStruct>(&U);
|
||||
Constant *NewInit =
|
||||
ConstantStruct::get(NewTy, Init->getOperand(0), Init->getOperand(1),
|
||||
Constant::getNullValue(VoidPtrTy), nullptr);
|
||||
Initializers.push_back(NewInit);
|
||||
Initializers.push_back(NewInit);
|
||||
}
|
||||
}
|
||||
assert(Initializers.size() == ATy->getNumElements());
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
; RUN: llvm-dis < %s.bc| FileCheck %s
|
||||
|
||||
; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
|
Binary file not shown.
Loading…
Reference in New Issue