From f8b74d7c213ed12c707f0c55848eeed1d445a3f0 Mon Sep 17 00:00:00 2001 From: kbkpbot Date: Wed, 17 Dec 2025 18:10:33 +0800 Subject: [PATCH] checker: allow assign to a shared int var (fix #25986) (#25988) --- vlib/v/checker/assign.v | 3 ++- vlib/v/tests/shared_int_assign_test.v | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/shared_int_assign_test.v diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index be2ea10d0..e778adb13 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -649,7 +649,8 @@ or use an explicit `unsafe{ a[..] }`, if you do not want a copy of the slice.', } } right_is_ptr := right_type.is_any_kind_of_pointer() - if !right_is_ptr && node.op == .assign && right_type_unwrapped.is_number() { + if !left_type.has_flag(.shared_f) && !right_is_ptr && node.op == .assign + && right_type_unwrapped.is_number() { c.error('cannot assign to `${left}`: ' + c.expected_msg(right_type_unwrapped, left_type_unwrapped), right.pos()) } diff --git a/vlib/v/tests/shared_int_assign_test.v b/vlib/v/tests/shared_int_assign_test.v new file mode 100644 index 000000000..fb4fb2bdd --- /dev/null +++ b/vlib/v/tests/shared_int_assign_test.v @@ -0,0 +1,18 @@ +module main + +struct Foo { +mut: + a shared int +} + +fn test_main() { + mut x := Foo{} + lock x.a { + x.a = 100 + } + rlock x.a { + k := x.a + // can't use assert x.a == 100, to be fixed + assert k == 100 + } +} -- 2.39.5