From 8442e028c12ede64cc8571bd44ed42c6039a940f Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 21 Apr 2025 12:31:11 -0300 Subject: [PATCH] checker: fix codegen for multi return with array fixed (fix #24280) (#24282) --- vlib/v/checker/assign.v | 3 ++- vlib/v/tests/fixed_array_multi_return_test.v | 24 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/fixed_array_multi_return_test.v diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index b698bc4f4..08eb112db 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -58,7 +58,8 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { c.error('cannot use multi-value ${right_type_sym.name} in single-value context', right.pos()) } - node.right_types = right_type_sym.mr_info().types + node.right_types = right_type_sym.mr_info().types.map(c.cast_fixed_array_ret(it, + c.table.sym(it))) right_len = node.right_types.len } else if right_type == ast.void_type { right_len = 0 diff --git a/vlib/v/tests/fixed_array_multi_return_test.v b/vlib/v/tests/fixed_array_multi_return_test.v new file mode 100644 index 000000000..acaf3d6f5 --- /dev/null +++ b/vlib/v/tests/fixed_array_multi_return_test.v @@ -0,0 +1,24 @@ +module main + +pub fn a(x1 [32]u8, y1 [32]u8, z1 [32]u8, x2 [32]u8, y2 [32]u8, z2 [32]u8) ([32]u8, [32]u8, [32]u8) { + return [32]u8{}, [32]u8{}, [32]u8{} +} + +pub fn b(x [32]u8, y [32]u8, z [32]u8) ([32]u8, [32]u8) { + return [32]u8{}, [32]u8{} +} + +fn test_main() { + x1 := [32]u8{} + y1 := [32]u8{} + z1 := [32]u8{} + x2 := [32]u8{} + y2 := [32]u8{} + z2 := [32]u8{} + + x3, y3, z3 := a(x1, y1, z1, x2, y2, z2) + + xx, yy := b(x3, y3, z3) + + assert xx == yy +} -- 2.39.5