"Iain Buclaw via Digitalmars-d" wrote in message
news:mailman.4161.1420481405.9932.digitalmar...@puremagic.com...
>
> I think I've got a handle on this, sort of. I've moved the declaration
> of
> __va_argsave into the glue layer, and added intrinsic detection for
> va_start/va_end/va_arg (the two-arg form).
>
> I've implemented them in the backend for win32 and they have passed a
> simple
> test!
>
I now have it working (and tested) for win32/linux32/linux64. va_start and
va_copy will probably both need intrinsics, but druntime's va_arg is fine.
On x86_64 all I do is completely ignore the second parameter to va_start and
memcpy the fields in.
I haven't done va_copy yet, but it should be fairly simple.
> Do you think we can change _all_ the druntime and phobos code to just
> use
> va_arg directly? It would be nice to have it all portable like that.
Oh, yeah, do it! You have references to __va_argsave in phobos, don't
you?
There are a _lot_ in lifetime.d. These should have been replaced with
non-variadic versions years ago, so I'm going to do that instead of trying
to un-hack them.
https://github.com/D-Programming-Language/dmd/pull/4303
https://github.com/D-Programming-Language/druntime/pull/1102