From a897e98da47e8ffc99f985d498c8050d9af8cfee Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 16 Aug 2025 09:52:30 -0300 Subject: [PATCH] fix --- vlib/v/checker/fn.v | 3 +++ .../tests/empty_arr_to_generic_param_err.out | 13 +++++++++++++ .../checker/tests/empty_arr_to_generic_param_err.vv | 10 ++++++++++ 3 files changed, 26 insertions(+) create mode 100644 vlib/v/checker/tests/empty_arr_to_generic_param_err.out create mode 100644 vlib/v/checker/tests/empty_arr_to_generic_param_err.vv diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index bbd1046c13..3ce1d5db0c 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -2576,6 +2576,9 @@ fn (mut c Checker) method_call(mut node ast.CallExpr, mut continue_check &bool) } } if exp_arg_typ.has_flag(.generic) { + if arg.expr is ast.ArrayInit && arg.expr.exprs.len == 0 { + c.error('cannot use empty array as generic argument', arg.pos) + } method_concrete_types := if method_generic_names_len == rec_concrete_types.len { rec_concrete_types } else { diff --git a/vlib/v/checker/tests/empty_arr_to_generic_param_err.out b/vlib/v/checker/tests/empty_arr_to_generic_param_err.out new file mode 100644 index 0000000000..95471d0934 --- /dev/null +++ b/vlib/v/checker/tests/empty_arr_to_generic_param_err.out @@ -0,0 +1,13 @@ +vlib/v/checker/tests/empty_arr_to_generic_param_err.vv:8:4: error: cannot use empty array as generic argument + 6 | + 7 | fn main() { + 8 | t([]) + | ~~ + 9 | Foo{}.t([]) + 10 | } +vlib/v/checker/tests/empty_arr_to_generic_param_err.vv:9:10: error: cannot use empty array as generic argument + 7 | fn main() { + 8 | t([]) + 9 | Foo{}.t([]) + | ~~ + 10 | } diff --git a/vlib/v/checker/tests/empty_arr_to_generic_param_err.vv b/vlib/v/checker/tests/empty_arr_to_generic_param_err.vv new file mode 100644 index 0000000000..ad91667872 --- /dev/null +++ b/vlib/v/checker/tests/empty_arr_to_generic_param_err.vv @@ -0,0 +1,10 @@ +fn t[T](a []T) {} + +struct Foo {} + +fn (t &Foo) t[T](a []T) {} + +fn main() { + t([]) + Foo{}.t([]) +}