https://github.com/daxpedda created 
https://github.com/llvm/llvm-project/pull/173580

Vararg on Wasm64 was using 4 bytes for the pointer instead of 8 bytes.

I checked the C ABI in the Wasm tool conventions just to make sure there isn't 
anything strange going on there, but there wasn't. Would still appreciate 
somebody double-checking this.

>From eb7c600cc69ad67259282f106e49ab28d11f47f1 Mon Sep 17 00:00:00 2001
From: daxpedda <[email protected]>
Date: Thu, 25 Dec 2025 22:44:33 +0100
Subject: [PATCH] [clang][WebAssembly] Fix Wasm Vararg pointer width

---
 clang/lib/CodeGen/Targets/WebAssembly.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/WebAssembly.cpp 
b/clang/lib/CodeGen/Targets/WebAssembly.cpp
index ebe996a4edd8d..ce97884fa57c4 100644
--- a/clang/lib/CodeGen/Targets/WebAssembly.cpp
+++ b/clang/lib/CodeGen/Targets/WebAssembly.cpp
@@ -160,10 +160,11 @@ RValue WebAssemblyABIInfo::EmitVAArg(CodeGenFunction 
&CGF, Address VAListAddr,
   bool IsIndirect = isAggregateTypeForABI(Ty) &&
                     !isEmptyRecord(getContext(), Ty, true) &&
                     !isSingleElementStruct(Ty, getContext());
-  return emitVoidPtrVAArg(CGF, VAListAddr, Ty, IsIndirect,
-                          getContext().getTypeInfoInChars(Ty),
-                          CharUnits::fromQuantity(4),
-                          /*AllowHigherAlign=*/true, Slot);
+  return emitVoidPtrVAArg(
+      CGF, VAListAddr, Ty, IsIndirect, getContext().getTypeInfoInChars(Ty),
+      CharUnits::fromQuantity(
+          getContext().getTargetInfo().getTriple().isArch64Bit() ? 8 : 4),
+      /*AllowHigherAlign=*/true, Slot);
 }
 
 std::unique_ptr<TargetCodeGenInfo>

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to