changeset 1178:a668f4051368

Fix a bug I noticed. Varargs were broken if preceded by tuple parameters.
author Frits van Bommel <fvbommel wxs.nl>
date Mon, 30 Mar 2009 00:00:43 +0200
parents a8b9fc41c34b
children 71479f6e2a01
files gen/tocall.cpp tests/mini/tuple_and_vararg.d
diffstat 2 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gen/tocall.cpp	Sun Mar 29 23:57:51 2009 +0200
+++ b/gen/tocall.cpp	Mon Mar 30 00:00:43 2009 +0200
@@ -122,11 +122,12 @@
 void DtoBuildDVarArgList(std::vector<LLValue*>& args, std::vector<llvm::AttributeWithIndex>& attrs, TypeFunction* tf, Expressions* arguments, size_t argidx)
 {
     Logger::println("doing d-style variadic arguments");
+    LOG_SCOPE
 
     std::vector<const LLType*> vtypes;
 
     // number of non variadic args
-    int begin = tf->parameters->dim;
+    int begin = Argument::dim(tf->parameters);
     Logger::println("num non vararg params = %d", begin);
 
     // get n args in arguments list
@@ -136,6 +137,7 @@
     for (int i=begin; i<n_arguments; i++)
     {
         Expression* argexp = (Expression*)arguments->data[i];
+        assert(argexp->type->ty != Ttuple);
         vtypes.push_back(DtoType(argexp->type));
         size_t sz = getTypePaddedSize(vtypes.back());
         if (sz < PTRSIZE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/mini/tuple_and_vararg.d	Mon Mar 30 00:00:43 2009 +0200
@@ -0,0 +1,13 @@
+// Based on dstress.run.t.tuple_15_A;
+
+module tuple_and_vararg;
+
+template TypeTuple(TList...){
+	alias TList TypeTuple;
+}
+
+void main(){
+	auto y = function(TypeTuple!(uint,uint) ab, ...){};
+        y(1, 2);
+        y(1, 2, "foo", 3.0);
+}