From 25bc06d8e1099a4744d7f51d71314287b76bd909 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 25 Mar 2026 16:42:23 +0300 Subject: [PATCH] cgen: fix two functions returning generic type with one casted and one not (fixes #18077) --- ...ncrete_fn_type_factories_regression_test.v | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 vlib/v/tests/generics/mixed_generic_and_concrete_fn_type_factories_regression_test.v diff --git a/vlib/v/tests/generics/mixed_generic_and_concrete_fn_type_factories_regression_test.v b/vlib/v/tests/generics/mixed_generic_and_concrete_fn_type_factories_regression_test.v new file mode 100644 index 000000000..ffa7b9b58 --- /dev/null +++ b/vlib/v/tests/generics/mixed_generic_and_concrete_fn_type_factories_regression_test.v @@ -0,0 +1,27 @@ +struct Issue18077FieldError { +} + +type Issue18077Validator[T] = fn (data T) ?Issue18077FieldError + +fn issue18077_get_max_validator[T](max_value T) Issue18077Validator[T] { + _ = max_value + return fn [T](data T) ?Issue18077FieldError { + _ = data + return none + } +} + +fn issue18077_get_max_length_validator(length int) Issue18077Validator[string] { + _ = length + return fn (data string) ?Issue18077FieldError { + _ = data + return Issue18077FieldError{} + } +} + +const issue18077_validate_int = issue18077_get_max_validator[int](10) + +fn test_issue_18077_mixed_generic_and_concrete_fn_type_factories() { + assert issue18077_validate_int(12345) == none + assert issue18077_get_max_length_validator(10)('hello') != none +} -- 2.39.5