Mercurial > projects > ldc
diff lphobos/std/stdarg.d @ 70:fb265a6efea1 trunk
[svn r74] Fixed passing types with different alignment to D-style variadic functions.
Fixed casting integer to pointer.
author | lindquist |
---|---|
date | Sun, 28 Oct 2007 19:33:50 +0100 |
parents | d4a678905d5e |
children | 5825d48b27d1 |
line wrap: on
line diff
--- a/lphobos/std/stdarg.d Sun Oct 28 04:23:38 2007 +0100 +++ b/lphobos/std/stdarg.d Sun Oct 28 19:33:50 2007 +0100 @@ -12,7 +12,8 @@ T va_arg(T)(inout va_list vp) { - va_list vptmp = vp; - vp += T.sizeof; + static assert((T.sizeof & (T.sizeof -1)) == 0); + va_list vptmp = cast(va_list)((cast(size_t)vp + T.sizeof - 1) & ~(T.sizeof - 1)); + vp = vptmp + T.sizeof; return *cast(T*)vptmp; }