diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7ef277e4d9..724b83d3d1 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -677,6 +677,9 @@ pub fn (mut c Checker) call_fn(call_expr mut ast.CallExpr) table.Type { c.returns = true } fn_name := call_expr.name + if fn_name == 'main' { + c.error('the `main` function cannot be called in the program', call_expr.pos) + } if fn_name == 'typeof' { // TODO: impl typeof properly (probably not going to be a fn call) return table.string_type diff --git a/vlib/v/checker/tests/main_called_err.out b/vlib/v/checker/tests/main_called_err.out new file mode 100644 index 0000000000..df9319b17c --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_called_err.v:2:2: error: the `main` function cannot be called in the program + 1| fn main() { + 2| main() + ~~~~~~ + 3| } diff --git a/vlib/v/checker/tests/main_called_err.v b/vlib/v/checker/tests/main_called_err.v new file mode 100644 index 0000000000..2be2db12ba --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.v @@ -0,0 +1,3 @@ +fn main() { + main() +} diff --git a/vlib/v/checker/tests/main_called_err.vv b/vlib/v/checker/tests/main_called_err.vv new file mode 100644 index 0000000000..2be2db12ba --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.vv @@ -0,0 +1,3 @@ +fn main() { + main() +}