diff --git a/vlib/v/parser/fn.v b/vlib/v/parser/fn.v index eb7e3da521..2e26899642 100644 --- a/vlib/v/parser/fn.v +++ b/vlib/v/parser/fn.v @@ -912,6 +912,10 @@ fn (mut p Parser) fn_params() ([]ast.Param, bool, bool) { } if is_mut { if !param_type.has_flag(.generic) { + if is_variadic { + p.error_with_pos('variadic arguments cannot be `mut`, `shared` or `atomic`', + pos) + } if is_shared { p.check_fn_shared_arguments(param_type, pos) } else if is_atomic { @@ -1027,6 +1031,10 @@ fn (mut p Parser) fn_params() ([]ast.Param, bool, bool) { } if is_mut { if !typ.has_flag(.generic) { + if is_variadic { + p.error_with_pos('variadic arguments cannot be `mut`, `shared` or `atomic`', + pos) + } if is_shared { p.check_fn_shared_arguments(typ, pos) } else if is_atomic { diff --git a/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.out b/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.out new file mode 100644 index 0000000000..2711016b34 --- /dev/null +++ b/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.out @@ -0,0 +1,3 @@ +vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.vv:1:22: error: variadic arguments cannot be `mut`, `shared` or `atomic` + 1 | type Foo = fn(mut ...string) + | ~~~~~~ diff --git a/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.vv b/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.vv new file mode 100644 index 0000000000..602647041e --- /dev/null +++ b/vlib/v/parser/tests/fn_alias_arg_variadic_mut_err.vv @@ -0,0 +1 @@ +type Foo = fn(mut ...string) diff --git a/vlib/v/parser/tests/fn_arg_variadic_mut_err.out b/vlib/v/parser/tests/fn_arg_variadic_mut_err.out new file mode 100644 index 0000000000..3a8a4ad053 --- /dev/null +++ b/vlib/v/parser/tests/fn_arg_variadic_mut_err.out @@ -0,0 +1,5 @@ +vlib/v/parser/tests/fn_arg_variadic_mut_err.vv:1:26: error: variadic arguments cannot be `mut`, `shared` or `atomic` + 1 | fn load(mut filepaths ...string) { + | ~~~~~~ + 2 | println(filepaths[0]) + 3 | } diff --git a/vlib/v/parser/tests/fn_arg_variadic_mut_err.vv b/vlib/v/parser/tests/fn_arg_variadic_mut_err.vv new file mode 100644 index 0000000000..bef98a0db8 --- /dev/null +++ b/vlib/v/parser/tests/fn_arg_variadic_mut_err.vv @@ -0,0 +1,3 @@ +fn load(mut filepaths ...string) { + println(filepaths[0]) +}