diff --git a/vlib/v/gen/c/infix.v b/vlib/v/gen/c/infix.v index 71c8513c46..b2009fa3b0 100644 --- a/vlib/v/gen/c/infix.v +++ b/vlib/v/gen/c/infix.v @@ -741,8 +741,9 @@ fn (mut g Gen) infix_expr_left_shift_op(node ast.InfixExpr) { tmp_var := g.new_tmp_var() array_info := left.unaliased_sym.info as ast.Array noscan := g.check_noscan(array_info.elem_type) - if right.unaliased_sym.kind == .array && array_info.elem_type != right.typ - && !(right.sym.kind == .alias + if (right.unaliased_sym.kind == .array + || (right.unaliased_sym.kind == .struct_ && right.unaliased_sym.name == 'array')) + && array_info.elem_type != right.typ && !(right.sym.kind == .alias && g.table.sumtype_has_variant(array_info.elem_type, node.right_type, false)) { // push an array => PUSH_MANY, but not if pushing an array to 2d array (`[][]int << []int`) g.write('_PUSH_MANY${noscan}(') diff --git a/vlib/v/tests/strings_builder_shift_array_reverse_test.v b/vlib/v/tests/strings_builder_shift_array_reverse_test.v new file mode 100644 index 0000000000..aca7690f72 --- /dev/null +++ b/vlib/v/tests/strings_builder_shift_array_reverse_test.v @@ -0,0 +1,12 @@ +import rand +import strings + +fn test_strings_builder_shift_array_reverse() { + mut a := strings.new_builder(0) + mut b := strings.new_builder(0) + b << rand.ascii(5).bytes() + a << b.reverse() + ret := a.str() + println(ret) + assert ret.len == 5 +}