From 593fdc5a9f00b13b76cc81a0f2d8fc71c13abf96 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 14 Apr 2026 12:45:31 +0300 Subject: [PATCH] checker: cgen: passing interface to generic function result in C error. (fixes #18320) --- .../generic_interface_callback_arg_err.out | 7 +++++ .../generic_interface_callback_arg_err.vv | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 vlib/v/checker/tests/generic_interface_callback_arg_err.out create mode 100644 vlib/v/checker/tests/generic_interface_callback_arg_err.vv diff --git a/vlib/v/checker/tests/generic_interface_callback_arg_err.out b/vlib/v/checker/tests/generic_interface_callback_arg_err.out new file mode 100644 index 000000000..76d47f993 --- /dev/null +++ b/vlib/v/checker/tests/generic_interface_callback_arg_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/generic_interface_callback_arg_err.vv:14:6: error: cannot use `BaseInterface` as `CustomStruct` in argument 1 to `cb` + 12 | fn callback[T](ctx BaseInterface, cb fn (T)) { + 13 | $if T is BaseInterface { + 14 | cb(ctx) + | ~~~ + 15 | } + 16 | } diff --git a/vlib/v/checker/tests/generic_interface_callback_arg_err.vv b/vlib/v/checker/tests/generic_interface_callback_arg_err.vv new file mode 100644 index 000000000..e240065c3 --- /dev/null +++ b/vlib/v/checker/tests/generic_interface_callback_arg_err.vv @@ -0,0 +1,26 @@ +// Regression test for issue #18320. +struct CustomStruct { +pub: + a int + b string +} + +interface BaseInterface { + a int +} + +fn callback[T](ctx BaseInterface, cb fn (T)) { + $if T is BaseInterface { + cb(ctx) + } +} + +fn main() { + custom := CustomStruct{ + a: 5 + b: 'test' + } + callback(custom, fn (ctx CustomStruct) { + println(ctx) + }) +} -- 2.39.5