From 7aca8b69da86e3a03473ec21c6946d1eaaf1ab6d Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 11 Jan 2025 14:27:25 -0300 Subject: [PATCH] checker: fix missing detection for `return` in lockexpr stmts (fix #23434) (#23435) --- vlib/v/checker/return.v | 4 ++++ .../tests/lockexpr_missing_return_err.out | 7 +++++++ .../tests/lockexpr_missing_return_err.vv | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 vlib/v/checker/tests/lockexpr_missing_return_err.out create mode 100644 vlib/v/checker/tests/lockexpr_missing_return_err.vv diff --git a/vlib/v/checker/return.v b/vlib/v/checker/return.v index 09fc9b05a..14c87283a 100644 --- a/vlib/v/checker/return.v +++ b/vlib/v/checker/return.v @@ -359,6 +359,10 @@ fn has_top_return(stmts []ast.Stmt) bool { if stmt.expr.method_name == 'compile_error' { return true } + } else if stmt.expr is ast.LockExpr { + if has_top_return(stmt.expr.stmts) { + return true + } } } else {} diff --git a/vlib/v/checker/tests/lockexpr_missing_return_err.out b/vlib/v/checker/tests/lockexpr_missing_return_err.out new file mode 100644 index 000000000..68607d497 --- /dev/null +++ b/vlib/v/checker/tests/lockexpr_missing_return_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/lockexpr_missing_return_err.vv:4:1: error: missing return at end of function `baz` + 2 | } + 3 | + 4 | fn baz(shared foo Foo) int { + | ~~~~~~~~~~~~~~~~~~~~~~~~~~ + 5 | lock foo { + 6 | } diff --git a/vlib/v/checker/tests/lockexpr_missing_return_err.vv b/vlib/v/checker/tests/lockexpr_missing_return_err.vv new file mode 100644 index 000000000..3527886ce --- /dev/null +++ b/vlib/v/checker/tests/lockexpr_missing_return_err.vv @@ -0,0 +1,18 @@ +struct Foo { +} + +fn baz(shared foo Foo) int { + lock foo { + } +} + +fn bar(shared foo Foo) int { + lock foo { + return 1 + } +} + +fn main() { + shared foo := Foo{} + bar(shared foo) +} -- 2.39.5