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