From 3c4878063ee27c9e019571d294f1579229771561 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 18 Jan 2025 10:53:59 -0300 Subject: [PATCH] checker: fix missing check for `a := [none]` (fix #23457) (#23504) --- vlib/v/checker/containers.v | 6 ++++++ vlib/v/checker/tests/array_none_element_err.out | 6 ++++++ vlib/v/checker/tests/array_none_element_err.vv | 4 ++++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/checker/tests/array_none_element_err.out create mode 100644 vlib/v/checker/tests/array_none_element_err.vv diff --git a/vlib/v/checker/containers.v b/vlib/v/checker/containers.v index 2711e6773..19426734c 100644 --- a/vlib/v/checker/containers.v +++ b/vlib/v/checker/containers.v @@ -174,6 +174,12 @@ fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type { typ = c.check_expr_option_or_result_call(expr, c.expr(mut expr)) c.expected_type = old_expected_type } else { + // [none] + if c.expected_type == ast.none_type && expr is ast.None { + c.error('invalid expression `none`, it is not an array of Option type', + expr.pos()) + continue + } typ = c.check_expr_option_or_result_call(expr, c.expr(mut expr)) } if expr is ast.CallExpr { diff --git a/vlib/v/checker/tests/array_none_element_err.out b/vlib/v/checker/tests/array_none_element_err.out new file mode 100644 index 000000000..f929214d7 --- /dev/null +++ b/vlib/v/checker/tests/array_none_element_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/array_none_element_err.vv:2:8: error: invalid expression `none`, it is not an array of Option type + 1 | fn main() { + 2 | a := [none] + | ~~~~ + 3 | println('${a}') + 4 | } diff --git a/vlib/v/checker/tests/array_none_element_err.vv b/vlib/v/checker/tests/array_none_element_err.vv new file mode 100644 index 000000000..1c34a48b4 --- /dev/null +++ b/vlib/v/checker/tests/array_none_element_err.vv @@ -0,0 +1,4 @@ +fn main() { + a := [none] + println('${a}') +} -- 2.39.5