From 75e906538f08aff110b9a1d16383369ba1fde41f Mon Sep 17 00:00:00 2001 From: Pierre Curto Date: Sat, 27 Jan 2024 11:24:48 +0100 Subject: [PATCH] v.checker: disallow assigning none to _ (#20646) --- vlib/v/checker/assign.v | 4 ++++ vlib/v/checker/tests/assign_blank_none_err.out | 12 ++++++++++++ vlib/v/checker/tests/assign_blank_none_err.vv | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 vlib/v/checker/tests/assign_blank_none_err.out create mode 100644 vlib/v/checker/tests/assign_blank_none_err.vv diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index 4da230e3c..724ce57aa 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -283,6 +283,10 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { right.right.pos) } } else if left.kind == .blank_ident { + if !is_decl && mut right is ast.None { + c.error('cannot assign a `none` value to blank `_` identifier', + right.pos) + } left_type = right_type node.left_types[i] = right_type if node.op !in [.assign, .decl_assign] { diff --git a/vlib/v/checker/tests/assign_blank_none_err.out b/vlib/v/checker/tests/assign_blank_none_err.out new file mode 100644 index 000000000..9dcf20e55 --- /dev/null +++ b/vlib/v/checker/tests/assign_blank_none_err.out @@ -0,0 +1,12 @@ +vlib/v/checker/tests/assign_blank_none_err.vv:2:7: error: cannot assign a `none` value to a variable + 1 | fn main() { + 2 | _ := none + | ~~~~ + 3 | _ = none + 4 | } +vlib/v/checker/tests/assign_blank_none_err.vv:3:6: error: cannot assign a `none` value to blank `_` identifier + 1 | fn main() { + 2 | _ := none + 3 | _ = none + | ~~~~ + 4 | } diff --git a/vlib/v/checker/tests/assign_blank_none_err.vv b/vlib/v/checker/tests/assign_blank_none_err.vv new file mode 100644 index 000000000..1efd2910b --- /dev/null +++ b/vlib/v/checker/tests/assign_blank_none_err.vv @@ -0,0 +1,4 @@ +fn main() { + _ := none + _ = none +} -- 2.39.5