From 3faf06bf950312526e4b6d49f1eb01d0c23d2424 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Tue, 1 Oct 2024 10:31:31 -0300 Subject: [PATCH] checker: fix missing check for alias to generic type (fix #22359) (#22360) --- vlib/v/checker/checker.v | 2 +- vlib/v/checker/tests/alias_to_generic_err.out | 7 +++++++ vlib/v/checker/tests/alias_to_generic_err.vv | 6 ++++++ vlib/v/checker/tests/any_type_err.out | 9 ++++++++- 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 vlib/v/checker/tests/alias_to_generic_err.out create mode 100644 vlib/v/checker/tests/alias_to_generic_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7a73c1a68..200af1fc6 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -533,7 +533,7 @@ fn (mut c Checker) alias_type_decl(node ast.AliasTypeDecl) { c.error('cannot make an alias of Result type', node.type_pos) } match parent_typ_sym.kind { - .placeholder, .int_literal, .float_literal { + .placeholder, .int_literal, .float_literal, .any { c.error('unknown aliased type `${parent_typ_sym.name}`', node.type_pos) } .alias { diff --git a/vlib/v/checker/tests/alias_to_generic_err.out b/vlib/v/checker/tests/alias_to_generic_err.out new file mode 100644 index 000000000..1cc3d1ac6 --- /dev/null +++ b/vlib/v/checker/tests/alias_to_generic_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/alias_to_generic_err.vv:3:12: error: unknown aliased type `T` + 1 | module main + 2 | + 3 | type Foo = T + | ^ + 4 | + 5 | fn main() { diff --git a/vlib/v/checker/tests/alias_to_generic_err.vv b/vlib/v/checker/tests/alias_to_generic_err.vv new file mode 100644 index 000000000..36e6239cb --- /dev/null +++ b/vlib/v/checker/tests/alias_to_generic_err.vv @@ -0,0 +1,6 @@ +module main + +type Foo = T + +fn main() { +} diff --git a/vlib/v/checker/tests/any_type_err.out b/vlib/v/checker/tests/any_type_err.out index aec1077ba..977c09f29 100644 --- a/vlib/v/checker/tests/any_type_err.out +++ b/vlib/v/checker/tests/any_type_err.out @@ -1,4 +1,4 @@ -vlib/v/checker/tests/any_type_err.vv:3:16: error: cannot use type `any` here +vlib/v/checker/tests/any_type_err.vv:3:16: error: unknown aliased type `any` 1 | // Any types should error, while parametrically polymorphic should not. 2 | 3 | type AnyType = any @@ -19,6 +19,13 @@ vlib/v/checker/tests/any_type_err.vv:5:27: error: cannot use type `any` here | ~~~ 6 | 7 | type PolyType = T +vlib/v/checker/tests/any_type_err.vv:7:17: error: unknown aliased type `T` + 5 | type AnyPolySumType = T | any + 6 | + 7 | type PolyType = T + | ^ + 8 | type PolySumType = T | string + 9 | vlib/v/checker/tests/any_type_err.vv:11:6: error: cannot use type `any` here 9 | 10 | struct AnyStructField[T] { -- 2.39.5