diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7126c38bce..e7296d4d25 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -115,6 +115,12 @@ fn (mut c Checker) check_file_in_main(file ast.File) bool { if it.is_pub { c.error('function `main` cannot be declared public', it.pos) } + if it.args.len > 0 { + c.error('function `main` cannot have arguments', it.pos) + } + if it.return_type != table.void_type { + c.error('function `main` cannot return values', it.pos) + } } else { if it.is_pub { c.warn('function `$it.name` $no_pub_in_main_warning', it.pos) diff --git a/vlib/v/checker/tests/main_args_err.out b/vlib/v/checker/tests/main_args_err.out new file mode 100644 index 0000000000..016cd8764e --- /dev/null +++ b/vlib/v/checker/tests/main_args_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_args_err.v:1:1: error: function `main` cannot have arguments + 1| fn main(a string) { + ~~~~~~~~~~~~~~~~~ + 2| println(a) + 3| } diff --git a/vlib/v/checker/tests/main_args_err.vv b/vlib/v/checker/tests/main_args_err.vv new file mode 100644 index 0000000000..69c950898c --- /dev/null +++ b/vlib/v/checker/tests/main_args_err.vv @@ -0,0 +1,3 @@ +fn main(a string) { + println(a) +} diff --git a/vlib/v/checker/tests/main_return_err.out b/vlib/v/checker/tests/main_return_err.out new file mode 100644 index 0000000000..0cbbfac211 --- /dev/null +++ b/vlib/v/checker/tests/main_return_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_return_err.v:1:1: error: function `main` cannot return values + 1| fn main() f64 { + ~~~~~~~~~~~~~ + 2| return 1.23 + 3| } diff --git a/vlib/v/checker/tests/main_return_err.vv b/vlib/v/checker/tests/main_return_err.vv new file mode 100644 index 0000000000..de52fe00ee --- /dev/null +++ b/vlib/v/checker/tests/main_return_err.vv @@ -0,0 +1,3 @@ +fn main() f64 { + return 1.23 +}