From fd47385ff2b36b9b72037ea5993e656780cdb4d9 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 19 Jul 2022 13:31:10 +0300 Subject: [PATCH] checker: check untyped nil in assignment --- vlib/v/checker/assign.v | 3 +++ vlib/v/checker/tests/nil.out | 7 +++++++ vlib/v/checker/tests/nil.vv | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/checker/tests/nil.out create mode 100644 vlib/v/checker/tests/nil.vv diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v index d68ba66f75..ba5854e6a5 100644 --- a/vlib/v/checker/assign.v +++ b/vlib/v/checker/assign.v @@ -220,6 +220,9 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { c.error('invalid use of reserved type `$left.name` as a variable name', left.pos) } + if right is ast.Nil { + c.error('use of untyped nil in assignment', right.pos()) + } } mut ident_var_info := left.info as ast.IdentVar if ident_var_info.share == .shared_t { diff --git a/vlib/v/checker/tests/nil.out b/vlib/v/checker/tests/nil.out new file mode 100644 index 0000000000..6d4d981d28 --- /dev/null +++ b/vlib/v/checker/tests/nil.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/nil.vv:3:18: error: use of untyped nil in assignment + 1 | fn main() { + 2 | unsafe { + 3 | value := nil + | ~~~ + 4 | println(value) + 5 | } diff --git a/vlib/v/checker/tests/nil.vv b/vlib/v/checker/tests/nil.vv new file mode 100644 index 0000000000..09deb0011f --- /dev/null +++ b/vlib/v/checker/tests/nil.vv @@ -0,0 +1,6 @@ +fn main() { + unsafe { + value := nil + println(value) + } +}