Skip to content

Commit 58a8fc6

Browse files
authored
cgen: handle auto deref var for index when the array element is an interface or a sumtype (#21491)
1 parent 331ccac commit 58a8fc6

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

vlib/v/gen/c/array.v

+5-2
Original file line numberDiff line numberDiff line change
@@ -1146,10 +1146,13 @@ fn (mut g Gen) gen_array_index(node ast.CallExpr) {
11461146
}
11471147
g.expr(node.left)
11481148
g.write(', ')
1149-
if node.args[0].expr.is_auto_deref_var() {
1149+
1150+
elem_typ := g.table.sym(node.left_type).array_info().elem_type
1151+
// auto deref var is redundant for interfaces and sum types.
1152+
if node.args[0].expr.is_auto_deref_var()
1153+
&& g.table.sym(elem_typ).kind !in [.interface_, .sum_type] {
11501154
g.write('*')
11511155
}
1152-
elem_typ := g.table.sym(node.left_type).array_info().elem_type
11531156
if g.table.sym(elem_typ).kind in [.interface_, .sum_type] {
11541157
g.expr_with_cast(node.args[0].expr, node.args[0].typ, elem_typ)
11551158
} else {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
interface Ennemi {
2+
}
3+
4+
struct Map {
5+
ennemis []Ennemi
6+
}
7+
8+
fn test_interface_arr_for_mut_iter_index() {
9+
mut maap := Map{}
10+
11+
for mut ennemi in maap.ennemis {
12+
assert maap.ennemis.index(ennemi) == 0
13+
}
14+
}

0 commit comments

Comments
 (0)