Skip to content

checker: missing type checking when generic fn is passed to generic struct fn #26195

@dy-tea

Description

@dy-tea

Describe the bug

Code: https://play.vlang.io/p/ed9aede158

struct Foo[T] {
	bar T
}

fn (f Foo[T]) bar[U](op fn (T) U) U {
	return op(f)
}

fn main() {
	f := Foo{'hello'}
	println(f.bar(fn (s string) int {
		return s.len
	}))
}

Reproduction Steps

See included code.

Expected Behavior

As the function param takes string, op() should not be callable with Foo[T]. This should be a checker error.
Additionally, I am missing the generic for T, it should probably be bar[T, U].

Current Behavior

Output:

/box/code.v:6: error: cannot convert 'struct main__Foo_T_string' to 'struct string'
builder error: 
==================
C error found. It should never happen, when compiling pure V code.
This is a V compiler bug, please report it using `v bug file.v`,
or goto https://github.com/vlang/v/issues/new/choose .
You can also use #help on Discord: https://discord.gg/vlang .
Exited with error status 1

Possible Solution

No response

Additional Information/Context

No response

V version

V 0.4.12 12f04b5

Environment details (OS name and version, etc.)

|V full version      |V 0.4.12 12f04b50a75652ec54ad6f7ead7bdc37eecb8202
|:-------------------|:-------------------
|OS                  |linux, Debian GNU/Linux 12 (bookworm) (VM)
|Processor           |2 cpus, 64bit, little endian, Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
|Memory              |0.68GB/2.02GB
|                    |
|V executable        |/home/admin/v/v
|V last modified time|2025-12-28 20:25:33
|                    |
|V home dir          |OK, value: /home/admin/v
|VMODULES            |OK, value: .vmodules
|VTMP                |OK, value: /tmp/v_0
|Current working dir |OK, value: /home/admin/playground
|                    |
|Git version         |git version 2.39.5
|V git status        |N/A
|.git/config present |true
|                    |
|cc version          |cc (Debian 12.2.0-14+deb12u1) 12.2.0
|gcc version         |gcc (Debian 12.2.0-14+deb12u1) 12.2.0
|clang version       |Debian clang version 14.0.6
|tcc version         |tcc version 0.9.28rc 2025-02-13 HEAD@f8bd136d (x86_64 Linux)
|tcc git status      |Error: fatal: detected dubious ownership in repository at '/home/admin/v/thirdparty/tcc'
To add an exception for this directory, call:

	git config --global --add safe.directory /home/admin/v/thirdparty/tcc
 Error: fatal: detected dubious ownership in repository at '/home/admin/v/thirdparty/tcc'
To add an exception for this directory, call:

	git config --global --add safe.directory /home/admin/v/thirdparty/tcc

|emcc version        |N/A
|glibc version       |ldd (Debian GLIBC 2.36-9+deb12u10) 2.36

Note

You can use the 👍 reaction to increase the issue's priority for developers.

Please note that only the 👍 reaction to the issue itself counts as a vote.
Other reactions and those to comments will not be taken into account.

Metadata

Metadata

Assignees

Labels

BugThis tag is applied to issues which reports bugs.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions