diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 12a6b6f0f6..1fe16b4fda 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1901,6 +1901,9 @@ pub fn (mut c Checker) call_fn(mut call_expr ast.CallExpr) table.Type { c.inside_println_arg = true c.expected_type = table.string_type call_expr.args[0].typ = c.expr(call_expr.args[0].expr) + if call_expr.args[0].typ.is_void() { + c.error('`$fn_name` can not print void expressions', call_expr.pos) + } if call_expr.args[0].typ.has_flag(.shared_f) { c.fail_if_not_rlocked(call_expr.args[0].expr, 'argument to print') } diff --git a/vlib/v/checker/tests/for_in_index_type.out b/vlib/v/checker/tests/for_in_index_type.out index 8d577390e0..376ba73749 100644 --- a/vlib/v/checker/tests/for_in_index_type.out +++ b/vlib/v/checker/tests/for_in_index_type.out @@ -4,3 +4,10 @@ vlib/v/checker/tests/for_in_index_type.vv:2:11: error: for in: cannot index `int | ~~ 3 | println(a) 4 | } +vlib/v/checker/tests/for_in_index_type.vv:3:3: error: `println` can not print void expressions + 1 | fn main() { + 2 | for a in 52 { + 3 | println(a) + | ~~~~~~~~~~ + 4 | } + 5 | } diff --git a/vlib/v/checker/tests/println_can_not_print_void_expressions.out b/vlib/v/checker/tests/println_can_not_print_void_expressions.out new file mode 100644 index 0000000000..674f2a557d --- /dev/null +++ b/vlib/v/checker/tests/println_can_not_print_void_expressions.out @@ -0,0 +1,27 @@ +vlib/v/checker/tests/println_can_not_print_void_expressions.vv:3:2: error: `print` can not print void expressions + 1 | fn blabla() {} + 2 | fn main() { + 3 | print(blabla()) + | ~~~~~~~~~~~~~~~ + 4 | println(blabla()) + 5 | eprint(blabla()) +vlib/v/checker/tests/println_can_not_print_void_expressions.vv:4:2: error: `println` can not print void expressions + 2 | fn main() { + 3 | print(blabla()) + 4 | println(blabla()) + | ~~~~~~~~~~~~~~~~~ + 5 | eprint(blabla()) + 6 | eprintln(blabla()) +vlib/v/checker/tests/println_can_not_print_void_expressions.vv:5:2: error: `eprint` can not print void expressions + 3 | print(blabla()) + 4 | println(blabla()) + 5 | eprint(blabla()) + | ~~~~~~~~~~~~~~~~ + 6 | eprintln(blabla()) + 7 | } +vlib/v/checker/tests/println_can_not_print_void_expressions.vv:6:2: error: `eprintln` can not print void expressions + 4 | println(blabla()) + 5 | eprint(blabla()) + 6 | eprintln(blabla()) + | ~~~~~~~~~~~~~~~~~~ + 7 | } diff --git a/vlib/v/checker/tests/println_can_not_print_void_expressions.vv b/vlib/v/checker/tests/println_can_not_print_void_expressions.vv new file mode 100644 index 0000000000..e412697572 --- /dev/null +++ b/vlib/v/checker/tests/println_can_not_print_void_expressions.vv @@ -0,0 +1,7 @@ +fn blabla() {} +fn main() { + print(blabla()) + println(blabla()) + eprint(blabla()) + eprintln(blabla()) +}