Mercurial > projects > ldc
diff gen/toir.cpp @ 264:a9dae3da4e87 trunk
[svn r285] Fixed D -> bool LLVM helper for floating point values.
Changed the way D-style varargs are passed, now each param should be aligned to size_t.sizeof.
author | lindquist |
---|---|
date | Sat, 14 Jun 2008 17:28:13 +0200 |
parents | 88252a1af660 |
children | 23d0d9855cad |
line wrap: on
line diff
--- a/gen/toir.cpp Sat Jun 14 06:13:35 2008 +0200 +++ b/gen/toir.cpp Sat Jun 14 17:28:13 2008 +0200 @@ -1121,6 +1121,9 @@ Argument* argu = Argument::getNth(tf->parameters, i); Expression* argexp = (Expression*)arguments->data[i]; vtypes.push_back(DtoType(argexp->type)); + size_t sz = getABITypeSize(vtypes.back()); + if (sz < PTRSIZE) + vtypes.back() = DtoSize_t(); } const LLStructType* vtype = LLStructType::get(vtypes); Logger::cout() << "d-variadic argument struct type:\n" << *vtype << '\n'; @@ -1132,7 +1135,9 @@ Expression* argexp = (Expression*)arguments->data[i]; if (global.params.llvmAnnotate) DtoAnnotation(argexp->toChars()); - DtoVariadicArgument(argexp, DtoGEPi(mem,0,k,"tmp")); + LLValue* argdst = DtoGEPi(mem,0,k); + argdst = DtoBitCast(argdst, getPtrToType(DtoType(argexp->type))); + DtoVariadicArgument(argexp, argdst); } // build type info array