From b6ce7cc198a8fb7234fd12d54e98162a90d2e856 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sat, 30 Jul 2022 19:27:28 +0800 Subject: [PATCH] checker: check invalid variable (fix #15240) (#15260) --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/invalid_variable_err.out | 19 +++++++++++++++++++ vlib/v/checker/tests/invalid_variable_err.vv | 5 +++++ 3 files changed, 27 insertions(+) create mode 100644 vlib/v/checker/tests/invalid_variable_err.out create mode 100644 vlib/v/checker/tests/invalid_variable_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7c9ceb6b90..521d77ba46 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2756,6 +2756,9 @@ pub fn (mut c Checker) ident(mut node ast.Ident) ast.Type { } else { typ = obj.expr.expr_type.clear_flag(.optional).clear_flag(.result) } + } else if obj.expr is ast.EmptyExpr { + c.error('invalid variable `$node.name`', node.pos) + typ = ast.void_type } else { typ = c.expr(obj.expr) } diff --git a/vlib/v/checker/tests/invalid_variable_err.out b/vlib/v/checker/tests/invalid_variable_err.out new file mode 100644 index 0000000000..42aa07c6ef --- /dev/null +++ b/vlib/v/checker/tests/invalid_variable_err.out @@ -0,0 +1,19 @@ +vlib/v/checker/tests/invalid_variable_err.vv:2:5: warning: unused variable: `b` + 1 | fn main() { + 2 | a, b := c + | ^ + 3 | if a { + 4 | } +vlib/v/checker/tests/invalid_variable_err.vv:2:7: error: assignment mismatch: 2 variable(s) 1 value(s) + 1 | fn main() { + 2 | a, b := c + | ~~ + 3 | if a { + 4 | } +vlib/v/checker/tests/invalid_variable_err.vv:3:5: error: invalid variable `a` + 1 | fn main() { + 2 | a, b := c + 3 | if a { + | ^ + 4 | } + 5 | } diff --git a/vlib/v/checker/tests/invalid_variable_err.vv b/vlib/v/checker/tests/invalid_variable_err.vv new file mode 100644 index 0000000000..f324336f94 --- /dev/null +++ b/vlib/v/checker/tests/invalid_variable_err.vv @@ -0,0 +1,5 @@ +fn main() { + a, b := c + if a { + } +}