diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 3737745f50..27dc58243d 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1619,6 +1619,10 @@ pub fn (mut c Checker) assign_stmt(mut assign_stmt ast.AssignStmt) { // is_decl := assign_stmt.op == .decl_assign for i, left in assign_stmt.left { + if left is ast.CallExpr { + c.error('cannot call function `${left.name}()` on the left side of an assignment', + left.pos) + } is_blank_ident := left.is_blank_ident() mut left_type := table.void_type if !is_decl && !is_blank_ident { diff --git a/vlib/v/checker/tests/assign_fn_call_on_left_side_err.out b/vlib/v/checker/tests/assign_fn_call_on_left_side_err.out new file mode 100644 index 0000000000..6fa9db8f64 --- /dev/null +++ b/vlib/v/checker/tests/assign_fn_call_on_left_side_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/assign_fn_call_on_left_side_err.v:6:2: error: cannot call function `foo()` on the left side of an assignment + 4 | + 5 | fn main() { + 6 | foo('s') = 1 + | ~~~~~~~~ + 7 | } diff --git a/vlib/v/checker/tests/assign_fn_call_on_left_side_err.vv b/vlib/v/checker/tests/assign_fn_call_on_left_side_err.vv new file mode 100644 index 0000000000..69c26dd8dc --- /dev/null +++ b/vlib/v/checker/tests/assign_fn_call_on_left_side_err.vv @@ -0,0 +1,7 @@ +fn foo(s string) int { + return 1 +} + +fn main() { + foo('s') = 1 +}