mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-02-07 07:23:13 +01:00
Remove initialization of padding of reals, ireals and creals.
According to the spec and C ABIs, the contents of padding is undefined. This was breaking dstress creal_01,02,03,07,08,09 and 20 on x86-64. The code was apparently added to fix creal_13,14 and 15, which explicitly compare padding and assert if it's different. I'd argue those tests are broken. (Also, on x86-64 they *also* fail) The tests this fixes, on the other hand, are basic arithmetic.
This commit is contained in:
@@ -1378,30 +1378,7 @@ DValue* DtoInitializer(LLValue* target, Initializer* init)
|
||||
{
|
||||
Logger::println("expression initializer");
|
||||
assert(ex->exp);
|
||||
DValue* res = ex->exp->toElem(gIR);
|
||||
|
||||
assert(llvm::isa<llvm::PointerType>(target->getType()) && "init target must be ptr");
|
||||
const LLType* targetty = target->getType()->getContainedType(0);
|
||||
if(targetty == LLType::X86_FP80Ty)
|
||||
{
|
||||
Logger::println("setting fp80 padding to zero");
|
||||
|
||||
LLValue* castv = DtoBitCast(target, getPtrToType(LLType::Int16Ty));
|
||||
LLValue* padding = DtoGEPi1(castv, 5);
|
||||
DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
|
||||
}
|
||||
else if(targetty == DtoComplexType(Type::tcomplex80))
|
||||
{
|
||||
Logger::println("setting complex fp80 padding to zero");
|
||||
|
||||
LLValue* castv = DtoBitCast(target, getPtrToType(LLType::Int16Ty));
|
||||
LLValue* padding = DtoGEPi1(castv, 5);
|
||||
DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
|
||||
padding = DtoGEPi1(castv, 11);
|
||||
DtoStore(llvm::Constant::getNullValue(LLType::Int16Ty), padding);
|
||||
}
|
||||
|
||||
return res;
|
||||
return ex->exp->toElem(gIR);
|
||||
}
|
||||
else if (init->isVoidInitializer())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user