On 12/07/12 11:12, John Colvin wrote:
When I compile the following code with -m32 and -m64 i get a totally
different result, the documentation suggests that they should be the
same...

import core.stdc.stdarg, std.stdio;

void main() {
     foo(0,5,4,3);
}

void foo(int dummy, ...) {
     va_list ap;

     for(int i; i<10; ++i) {
         version(X86_64) {
             va_start(ap, __va_argsave);
         }
         else version(X86) {
             va_start(ap, dummy);
         }
         else
             static assert(false, "Unsupported platform");

         int tmp;
         va_arg!(int)(ap,tmp);
         writeln(ap," ", tmp);
     }
}

when compiled with -m32 I get:

FF960278 5
FF960278 5
FF960278 5
FF960278 5
FF960278 5

and with -m64 I get:

7FFFCDF941D0 5
7FFFCDF941D0 4
7FFFCDF941D0 3
7FFFCDF941D0 38
7FFFCDF941D0 -839302560

(the end stuff is garbage, different every time)

I'm uncertain, even after looking over the stdarg src, why this would
happen. The correct output is all 5s obviously.

Known bug, already fixed in git for a couple of months.


Reply via email to