From 93756d2027cad6c3f7295cbf6db99bc78d83ec6a Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 19 Dec 2023 20:20:40 +0800 Subject: [PATCH] cgen: fix array insert for a variadic arg parameter (#20217) --- vlib/v/gen/c/array.v | 3 ++- .../tests/array_insert_variadic_arg_variable_test.v | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/array_insert_variadic_arg_variable_test.v diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 817b9b53e08694..1fb2e598f9a4fc 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -825,7 +825,8 @@ fn (mut g Gen) gen_array_insert(node ast.CallExpr) { left_info := left_sym.info as ast.Array elem_type_str := g.typ(left_info.elem_type) arg2_sym := g.table.sym(node.args[1].typ) - is_arg2_array := arg2_sym.kind == .array && node.args[1].typ == node.left_type + is_arg2_array := arg2_sym.kind == .array + && node.args[1].typ.clear_flag(.variadic) == node.left_type noscan := g.check_noscan(left_info.elem_type) addr := if node.left_type.is_ptr() { '' } else { '&' } if is_arg2_array { diff --git a/vlib/v/tests/array_insert_variadic_arg_variable_test.v b/vlib/v/tests/array_insert_variadic_arg_variable_test.v new file mode 100644 index 00000000000000..06d0bb485209e3 --- /dev/null +++ b/vlib/v/tests/array_insert_variadic_arg_variable_test.v @@ -0,0 +1,12 @@ +fn foo(args ...string) []string { + mut v := ['a'] + v.insert(1, ['b']) + v.insert(1, args) + return v +} + +fn test_array_insert_variadic_arg_variable() { + ret := foo('b') + println(ret) + assert ret == ['a', 'b', 'b'] +}