diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v index 2f6226b982578d..995f96039df0a2 100644 --- a/vlib/v/gen/c/assign.v +++ b/vlib/v/gen/c/assign.v @@ -889,7 +889,7 @@ fn (mut g Gen) gen_cross_var_assign(node &ast.AssignStmt) { } } ast.IndexExpr { - sym := g.table.sym(left.left_type) + sym := g.table.sym(g.table.unaliased_type(left.left_type)) if sym.kind == .array { info := sym.info as ast.Array elem_typ := g.table.sym(info.elem_type) diff --git a/vlib/v/tests/cross_assign_aliased_array_test.v b/vlib/v/tests/cross_assign_aliased_array_test.v new file mode 100644 index 00000000000000..29558946c3286f --- /dev/null +++ b/vlib/v/tests/cross_assign_aliased_array_test.v @@ -0,0 +1,13 @@ +pub type IntSlice = []int + +pub fn (mut x IntSlice) swap(i int, j int) { + x[i], x[j] = x[j], x[i] +} + +fn test_cross_assign_aliased_array() { + mut x := IntSlice([11, 22]) + println(x) + x.swap(0, 1) + println(x) + assert x == IntSlice([22, 11]) +}