From 0e8d148fe77b2d39177448d4f6af4fa6e67eaab5 Mon Sep 17 00:00:00 2001 From: shove Date: Thu, 3 Nov 2022 23:28:59 +0800 Subject: [PATCH] checker: give a checker error message on `print(1), print(2)` (fix #16311) (#16314) --- vlib/v/checker/checker.v | 6 ++++++ vlib/v/checker/tests/multi_return_use_void_type_err.out | 5 +++++ vlib/v/checker/tests/multi_return_use_void_type_err.vv | 3 +++ 3 files changed, 14 insertions(+) create mode 100644 vlib/v/checker/tests/multi_return_use_void_type_err.out create mode 100644 vlib/v/checker/tests/multi_return_use_void_type_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 8c80540a63..e63787e721 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -3112,6 +3112,12 @@ pub fn (mut c Checker) concat_expr(mut node ast.ConcatExpr) ast.Type { node.return_type = typ return typ } else { + for i := 0; i < mr_types.len; i++ { + if mr_types[i] == ast.void_type { + c.error('type `void` cannot be used in multi-return', node.vals[i].pos()) + return ast.void_type + } + } typ := c.table.find_or_register_multi_return(mr_types) ast.new_type(typ) node.return_type = typ diff --git a/vlib/v/checker/tests/multi_return_use_void_type_err.out b/vlib/v/checker/tests/multi_return_use_void_type_err.out new file mode 100644 index 0000000000..2066f5ec36 --- /dev/null +++ b/vlib/v/checker/tests/multi_return_use_void_type_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/multi_return_use_void_type_err.vv:2:2: error: type `void` cannot be used in multi-return + 1 | fn main() { + 2 | print('a'), print('b') + | ~~~~~~~~~~ + 3 | } diff --git a/vlib/v/checker/tests/multi_return_use_void_type_err.vv b/vlib/v/checker/tests/multi_return_use_void_type_err.vv new file mode 100644 index 0000000000..b4343e0240 --- /dev/null +++ b/vlib/v/checker/tests/multi_return_use_void_type_err.vv @@ -0,0 +1,3 @@ +fn main() { + print('a'), print('b') +}