From 949abb25bfd897a59d6d54f733f3f3be8d2b5f77 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 21 Apr 2026 05:21:34 +0300 Subject: [PATCH] checker: fix return 0; throwing unreachable code error (fixes #26916) --- vlib/v/checker/checker.v | 3 ++- vlib/v/tests/last_stmt_semicolon_or_expr_test.v | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 2ce9e5898..8f30b5d44 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4513,7 +4513,8 @@ fn (mut c Checker) stmts_ending_with_expression(mut stmts []ast.Stmt, expected_o c.stmt_level++ for i, mut stmt in stmts { c.is_last_stmt = i == stmts.len - 1 - if c.scope_returns && unreachable.line_nr == -1 { + if c.scope_returns && unreachable.line_nr == -1 && stmt !is ast.SemicolonStmt + && stmt !is ast.EmptyStmt { unreachable = stmt.pos } prev_expected_or_type := c.expected_or_type diff --git a/vlib/v/tests/last_stmt_semicolon_or_expr_test.v b/vlib/v/tests/last_stmt_semicolon_or_expr_test.v index 26c79b77a..c93a3921b 100644 --- a/vlib/v/tests/last_stmt_semicolon_or_expr_test.v +++ b/vlib/v/tests/last_stmt_semicolon_or_expr_test.v @@ -9,3 +9,13 @@ fn test_main() { // vfmt on println('x=${x}') } + +fn return_zero_with_trailing_semicolon() int { + // vfmt off + return 0; + // vfmt on +} + +fn test_return_with_trailing_semicolon() { + assert return_zero_with_trailing_semicolon() == 0 +} -- 2.39.5