From e47db462fb1290dfb38241a257e422cba10749c2 Mon Sep 17 00:00:00 2001 From: IDONTUSEGH Date: Tue, 31 Mar 2026 11:28:53 +0200 Subject: [PATCH] Implement va_arg for WebAssembly --- runtime/druntime/src/core/stdc/stdarg.d | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/runtime/druntime/src/core/stdc/stdarg.d b/runtime/druntime/src/core/stdc/stdarg.d index 147b4a29f7..641ee7b3b6 100644 --- a/runtime/druntime/src/core/stdc/stdarg.d +++ b/runtime/druntime/src/core/stdc/stdarg.d @@ -180,6 +180,24 @@ else version (DigitalMars) */ version (GNU) T va_arg(T)(ref va_list ap); // intrinsic +else version (WebAssembly){ + pragma(LDC_va_arg) + T ldc_va_arg(T)(ref va_list ap); + T va_arg(T)(ref va_list ap) + { + static if (__traits(isScalar, T) || is(T == U*, U)) + { + return ldc_va_arg!T(ap); + } + else + { + ap = ap.alignUp!(T.alignof); + auto p = cast(T*) ap; + ap += T.sizeof.alignUp; + return *p; + } + } +} else T va_arg(T)(ref va_list ap) {