From ce2ece667dac76f4aed41b7179ee4262d58c6cba Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 15 Apr 2026 15:07:00 +0300 Subject: [PATCH] checker: fix missing compile time error for option selector in or block (fixes #17761) --- ...option_selector_ierror_in_or_block_err.out | 14 ++++++++++++++ .../option_selector_ierror_in_or_block_err.vv | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 vlib/v/checker/tests/option_selector_ierror_in_or_block_err.out create mode 100644 vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv diff --git a/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.out b/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.out new file mode 100644 index 000000000..f093de4aa --- /dev/null +++ b/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.out @@ -0,0 +1,14 @@ +vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv:11:15: error: to propagate the call, `check` must return an Option type + 9 | fn (c SomeStruct) check() int { + 10 | some_fn_that_produce_err() or { + 11 | assert c.err? == err + | ^ + 12 | return 0 + 13 | } +Details: vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv:9:27: details: prepend ? before the declaration of the return type of `check` + 7 | } + 8 | + 9 | fn (c SomeStruct) check() int { + | ~~~ + 10 | some_fn_that_produce_err() or { + 11 | assert c.err? == err diff --git a/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv b/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv new file mode 100644 index 000000000..aedae6db3 --- /dev/null +++ b/vlib/v/checker/tests/option_selector_ierror_in_or_block_err.vv @@ -0,0 +1,19 @@ +struct SomeStruct { + err ?IError +} + +fn some_fn_that_produce_err() ! { + return error('hey') +} + +fn (c SomeStruct) check() int { + some_fn_that_produce_err() or { + assert c.err? == err + return 0 + } + return 1 +} + +fn main() { + SomeStruct{}.check() +} -- 2.39.5