Mercurial > projects > ldc
changeset 1004:45ed9e125a00
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.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Fri, 27 Feb 2009 19:41:25 +0100 |
parents | de97188378bc |
children | 5aa5d25508c6 |
files | gen/llvmhelpers.cpp |
diffstat | 1 files changed, 1 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/llvmhelpers.cpp Fri Feb 27 12:35:31 2009 +0100 +++ b/gen/llvmhelpers.cpp Fri Feb 27 19:41:25 2009 +0100 @@ -1378,30 +1378,7 @@ { 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()) {