diff --git a/vlib/v/gen/c/index.v b/vlib/v/gen/c/index.v index 53068f794a..20642b84a8 100644 --- a/vlib/v/gen/c/index.v +++ b/vlib/v/gen/c/index.v @@ -65,6 +65,9 @@ fn (mut g Gen) range_expr(node ast.IndexExpr, range ast.RangeExpr) { } else { g.write('string_substr(') } + if node.left_type.is_ptr() { + g.write('*') + } g.expr(node.left) } else if sym.kind == .array { if node.is_gated { diff --git a/vlib/v/tests/string_index_in_for_mut_in_test.v b/vlib/v/tests/string_index_in_for_mut_in_test.v new file mode 100644 index 0000000000..3c2f30f54a --- /dev/null +++ b/vlib/v/tests/string_index_in_for_mut_in_test.v @@ -0,0 +1,25 @@ +module main + +[heap] +pub struct Grid { +pub mut: + header []string +} + +fn test_string_index_in_for_mut_in() { + h := ['yore', 'yaya'] + + mut grid := Grid{ + header: h + } + wrap_text(mut grid) +} + +fn wrap_text(mut gv Grid) { + for mut ch in gv.header { + ch = ch[1..2] + } + + println(gv) + assert gv.header == ['o', 'a'] +}