From 4dfdcb760ef18e0d3e6f67eaeb36e936c1048552 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 15 Apr 2026 05:26:57 +0300 Subject: [PATCH] cgen: fix weird behavior on iterating an array (fixes #26874) --- vlib/v/gen/c/cgen.v | 3 +++ .../loops/for_in_mut_mutable_app_field_test.v | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 524f4a130..e2b56a4e6 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -5467,6 +5467,9 @@ fn (mut g Gen) expr(node_ ast.Expr) { } } } + if node.right.is_auto_deref_var() && node.op !in [.amp, .mul, .arrow] { + g.write('*') + } if tmp_var == '' { g.expr(node.right) } else { diff --git a/vlib/v/tests/loops/for_in_mut_mutable_app_field_test.v b/vlib/v/tests/loops/for_in_mut_mutable_app_field_test.v index 0c8800e82..21194db0a 100644 --- a/vlib/v/tests/loops/for_in_mut_mutable_app_field_test.v +++ b/vlib/v/tests/loops/for_in_mut_mutable_app_field_test.v @@ -18,3 +18,28 @@ fn test_for_in_struct_with_mutable_array_field_indexed_several_times_in_the_loop } assert app.index[x][y] == Item{[555, 555, 555]} } + +struct Registers { +mut: + registers [4]bool +} + +fn (mut r Registers) allocate_register() int { + for i, mut available in r.registers { + if !available { + available = true + return i + } + } + panic('No available register') +} + +fn test_for_in_struct_with_mutable_fixed_array_field() { + mut regs := Registers{} + assert regs.allocate_register() == 0 + assert regs.allocate_register() == 1 + assert regs.registers[0] + assert regs.registers[1] + assert !regs.registers[2] + assert !regs.registers[3] +} -- 2.39.5