From d32dfa5ad1afb1bfde5b71f2626873d835e76e94 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 23 Apr 2026 21:21:47 +0300 Subject: [PATCH] cgen: fix cast between pointer and integer of different size with a sum type (fixes #14492) --- vlib/v/gen/c/struct.v | 2 +- .../sumtype_generic_ptr_field_default.out | 1 + .../sumtype_generic_ptr_field_default.vv | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.out create mode 100644 vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.vv diff --git a/vlib/v/gen/c/struct.v b/vlib/v/gen/c/struct.v index c3fcd0cbe..47a11a65c 100644 --- a/vlib/v/gen/c/struct.v +++ b/vlib/v/gen/c/struct.v @@ -743,7 +743,7 @@ fn (mut g Gen) zero_struct_field(field ast.StructField) bool { } else if field.typ.has_flag(.option) { g.gen_option_error(field.typ, ast.None{}) return true - } else if sym.info is ast.SumType { + } else if sym.info is ast.SumType && !field.typ.is_any_kind_of_pointer() { g.write(g.type_default_sumtype(field.typ, sym)) return true } else if sym.info is ast.ArrayFixed { diff --git a/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.out b/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.out new file mode 100644 index 000000000..f599e28b8 --- /dev/null +++ b/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.out @@ -0,0 +1 @@ +10 diff --git a/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.vv b/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.vv new file mode 100644 index 000000000..67ef985ae --- /dev/null +++ b/vlib/v/gen/c/testdata/sumtype_generic_ptr_field_default.vv @@ -0,0 +1,26 @@ +module main + +@[heap] +struct JoshTree[T] { + primary_key int + value T +mut: + leaf &Node[T] +} + +struct Empty {} + +type Node[T] = Empty | JoshTree[T] + +fn get_leaf[T](node &Node[T]) &JoshTree[T] { + return unsafe { &JoshTree[T](node) } +} + +fn main() { + root := Node[int](JoshTree[int]{ + primary_key: 1 + value: 10 + }) + leaf := get_leaf[int](&root) + println(leaf.value) +} -- 2.39.5