checker: check unknown generic type (#7954)
parent
0998cbaaba
commit
828120a918
|
@ -1658,6 +1658,12 @@ pub fn (mut c Checker) call_fn(mut call_expr ast.CallExpr) table.Type {
|
||||||
// builtin C.m*, C.s* only - temp
|
// builtin C.m*, C.s* only - temp
|
||||||
c.warn('function `$f.name` must be called from an `unsafe` block', call_expr.pos)
|
c.warn('function `$f.name` must be called from an `unsafe` block', call_expr.pos)
|
||||||
}
|
}
|
||||||
|
if f.is_generic {
|
||||||
|
sym := c.table.get_type_symbol(call_expr.generic_type)
|
||||||
|
if sym.kind == .placeholder {
|
||||||
|
c.error('unknown type `$sym.name`', call_expr.generic_list_pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
if f.is_generic && f.return_type.has_flag(.generic) {
|
if f.is_generic && f.return_type.has_flag(.generic) {
|
||||||
rts := c.table.get_type_symbol(f.return_type)
|
rts := c.table.get_type_symbol(f.return_type)
|
||||||
if rts.kind == .struct_ {
|
if rts.kind == .struct_ {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
vlib/v/checker/tests/unknown_generic_type.vv:5:13: error: unknown type `Foo`
|
||||||
|
3 |
|
||||||
|
4 | fn main() {
|
||||||
|
5 | x := decode<Foo>('{"name": "test"}')?
|
||||||
|
| ~~~~~
|
||||||
|
6 | println(x)
|
||||||
|
7 | }
|
|
@ -0,0 +1,7 @@
|
||||||
|
fn decode<T>(raw_data string) ?T {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
x := decode<Foo>('{"name": "test"}')?
|
||||||
|
println(x)
|
||||||
|
}
|
Loading…
Reference in New Issue