From 0e4ae765077ea3c91fe30d904998a163d99293f3 Mon Sep 17 00:00:00 2001 From: Surman The Dead <70163032+SurmanPP@users.noreply.github.com> Date: Thu, 15 Jan 2026 06:01:40 +0100 Subject: [PATCH] wasm: fix size of pointers in structs (#26357) --- vlib/v/gen/wasm/serialise/serialise.v | 4 ++++ vlib/v/gen/wasm/tests/misc.vv | 17 +++++++++++++++++ vlib/v/gen/wasm/tests/misc.vv.out | 3 +++ 3 files changed, 24 insertions(+) diff --git a/vlib/v/gen/wasm/serialise/serialise.v b/vlib/v/gen/wasm/serialise/serialise.v index bd9524c5e..2424239b9 100644 --- a/vlib/v/gen/wasm/serialise/serialise.v +++ b/vlib/v/gen/wasm/serialise/serialise.v @@ -58,6 +58,10 @@ pub fn (mut p Pool) type_struct_info(typ ast.Type) ?StructInfo { } pub fn (mut p Pool) type_size(typ ast.Type) (int, int) { + if typ.nr_muls() > 0 { + return p.table.pointer_size, p.table.pointer_size + } + ts := p.table.sym(typ) if ts.size != -1 && typ.idx() in p.structs { return ts.size, ts.align diff --git a/vlib/v/gen/wasm/tests/misc.vv b/vlib/v/gen/wasm/tests/misc.vv index 076cb1678..9af617255 100644 --- a/vlib/v/gen/wasm/tests/misc.vv +++ b/vlib/v/gen/wasm/tests/misc.vv @@ -82,7 +82,24 @@ fn run_defer() { defer_if(false) } +struct HasPointers { + a int + msg &string +pub mut: + same &HasPointers +} + +fn ptr_in_struct() { + msg := 'pointer in struct' + mut s := HasPointers{1234, &msg, unsafe { nil }} + println(*s.msg) + s.same = &s + println(*&int(voidptr(s.same.a))) // FIXME: wont work without casts +} + fn main() { + println('ptr_in_struct') + ptr_in_struct() println('ptr_arith') ptr_arith() run_defer() diff --git a/vlib/v/gen/wasm/tests/misc.vv.out b/vlib/v/gen/wasm/tests/misc.vv.out index cfcfbde57..5398c2dd7 100644 --- a/vlib/v/gen/wasm/tests/misc.vv.out +++ b/vlib/v/gen/wasm/tests/misc.vv.out @@ -1,3 +1,6 @@ +ptr_in_struct +pointer in struct +1234 ptr_arith 12 14 -- 2.39.5