Mercurial > projects > ldc
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); +}