From 9490115c9a9768bf4361f1109ecd67d0539f6872 Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 21 Nov 2024 14:51:45 +0800 Subject: [PATCH] cgen: fix aliases of fixed array append to array (fix #22926) (#22929) --- vlib/v/gen/c/infix.v | 6 +++++- .../alias_fixed_array_append_to_array_test.v | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/aliases/alias_fixed_array_append_to_array_test.v diff --git a/vlib/v/gen/c/infix.v b/vlib/v/gen/c/infix.v index a4f743687..8e6c53594 100644 --- a/vlib/v/gen/c/infix.v +++ b/vlib/v/gen/c/infix.v @@ -1027,7 +1027,11 @@ fn (mut g Gen) infix_expr_left_shift_op(node ast.InfixExpr) { if needs_clone { g.write('string_clone(') } - g.expr_with_cast(node.right, right.typ, array_info.elem_type) + if node.right is ast.CastExpr && node.right.expr is ast.ArrayInit { + g.expr(node.right.expr) + } else { + g.expr_with_cast(node.right, right.typ, array_info.elem_type) + } if needs_clone { g.write(')') } diff --git a/vlib/v/tests/aliases/alias_fixed_array_append_to_array_test.v b/vlib/v/tests/aliases/alias_fixed_array_append_to_array_test.v new file mode 100644 index 000000000..6819cc779 --- /dev/null +++ b/vlib/v/tests/aliases/alias_fixed_array_append_to_array_test.v @@ -0,0 +1,13 @@ +pub type Addr = [4]u8 + +fn test_alias_fixed_array_append_to_array() { + mut my_array := []Addr{} + for i := 0; i <= 3; i++ { + my_array << Addr([u8(10), 0, 0, u8(i)]!) + } + println(my_array) + assert my_array[0] == Addr([u8(10), 0, 0, 0]!) + assert my_array[1] == Addr([u8(10), 0, 0, 1]!) + assert my_array[2] == Addr([u8(10), 0, 0, 2]!) + assert my_array[3] == Addr([u8(10), 0, 0, 3]!) +} -- 2.39.5