From 7dd55a936f007ef57f26ffddb3dc12042fc3964e Mon Sep 17 00:00:00 2001 From: kbkpbot Date: Sun, 4 Jan 2026 15:57:41 +0800 Subject: [PATCH] cgen: fix array.contains() when right is ref (fix #26253) (#26255) --- vlib/v/gen/c/array.v | 3 ++- vlib/v/tests/arrays_reverse_ref_test.v | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/arrays_reverse_ref_test.v diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 3600f5316..51913bb1f 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -1316,7 +1316,8 @@ fn (mut g Gen) gen_array_contains(left_type ast.Type, left ast.Expr, right_type is_auto_deref_var := right.is_auto_deref_var() if (is_auto_deref_var && !elem_typ.is_ptr()) || (g.table.sym(elem_typ).kind !in [.interface, .sum_type, .struct] && right is ast.Ident - && right.info is ast.IdentVar && g.table.sym(right.obj.typ).kind in [.interface, .sum_type]) { + && right.info is ast.IdentVar && g.table.sym(right.obj.typ).kind in [.interface, .sum_type]) + || elem_typ.nr_muls() + 1 == right_type.nr_muls() { g.write('*') } if g.table.sym(elem_typ).kind in [.interface, .sum_type] { diff --git a/vlib/v/tests/arrays_reverse_ref_test.v b/vlib/v/tests/arrays_reverse_ref_test.v new file mode 100644 index 000000000..7342e208f --- /dev/null +++ b/vlib/v/tests/arrays_reverse_ref_test.v @@ -0,0 +1,12 @@ +module main + +import arrays + +fn test_main() { + a := ['abc', 'def'] + + for str in arrays.reverse_iterator(a) { + println(str in a) + assert (str in a) == true + } +} -- 2.39.5