From 8ca3015c298a57fa245142118d5e98014ea2de0e Mon Sep 17 00:00:00 2001 From: CreeperFace <165158232+dy-tea@users.noreply.github.com> Date: Wed, 29 Oct 2025 08:50:21 +0000 Subject: [PATCH] cgen: create ctemp before lockexpr gen (fix #25576) (#25612) --- vlib/v/gen/c/assert.v | 3 ++ .../shared_lock_expr_assert_test.v | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 vlib/v/tests/concurrency/shared_lock_expr_assert_test.v diff --git a/vlib/v/gen/c/assert.v b/vlib/v/gen/c/assert.v index bf463c3d5..f181b69ad 100644 --- a/vlib/v/gen/c/assert.v +++ b/vlib/v/gen/c/assert.v @@ -100,6 +100,9 @@ fn (mut g Gen) assert_subexpression_to_ctemp(expr ast.Expr, expr_type ast.Type) return g.new_ctemp_var_then_gen(expr, expr_type) } } + ast.LockExpr { + return g.new_ctemp_var_then_gen(expr, expr_type) + } else {} } return unsupported_ctemp_assert_transform diff --git a/vlib/v/tests/concurrency/shared_lock_expr_assert_test.v b/vlib/v/tests/concurrency/shared_lock_expr_assert_test.v new file mode 100644 index 000000000..9b53444fb --- /dev/null +++ b/vlib/v/tests/concurrency/shared_lock_expr_assert_test.v @@ -0,0 +1,38 @@ +struct Counter { +mut: + value int +} + +fn (shared c Counter) inc() { + lock c { + c.value += 1 + } +} + +fn (c Counter) val() int { + return c.value +} + +fn test_main() { + shared c := Counter{1} + + assert rlock c { + c.val() + } == 1 + if rlock c { + c.val() + } == 1 { + assert true + } + + c.inc() + + assert rlock c { + c.val() + } == 2 + if rlock c { + c.val() + } == 2 { + assert true + } +} -- 2.39.5