From 4652e4d49cb2d8966f5d1493a0e2b7eae7f091b5 Mon Sep 17 00:00:00 2001 From: CreeperFace <165158232+dy-tea@users.noreply.github.com> Date: Wed, 17 Dec 2025 17:27:17 +0000 Subject: [PATCH] checker: ensure type of global exists (fix #25910) (#25998) --- vlib/v/checker/checker.v | 5 +---- vlib/v/checker/tests/globals/nested_unknown_typ.out | 5 +++++ vlib/v/checker/tests/globals/nested_unknown_typ.vv | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 vlib/v/checker/tests/globals/nested_unknown_typ.out create mode 100644 vlib/v/checker/tests/globals/nested_unknown_typ.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index ba4fbcd5f..7c4b93d12 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2604,10 +2604,7 @@ fn (mut c Checker) global_decl(mut node ast.GlobalDecl) { // add global to exports for duplicate check c.table.export_names[field.name] = field.name } - sym := c.table.sym(field.typ) - if sym.kind == .placeholder { - c.error('unknown type `${sym.name}`', field.typ_pos) - } + c.ensure_type_exists(field.typ, field.typ_pos) if field.has_expr { if field.expr is ast.AnonFn && field.name == 'main' { c.error('the `main` function is the program entry point, cannot redefine it', diff --git a/vlib/v/checker/tests/globals/nested_unknown_typ.out b/vlib/v/checker/tests/globals/nested_unknown_typ.out new file mode 100644 index 000000000..94a91a336 --- /dev/null +++ b/vlib/v/checker/tests/globals/nested_unknown_typ.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/globals/nested_unknown_typ.vv:5:13: error: unknown type `StructS` + 3 | + 4 | @[markused] + 5 | __global ga []?StructS + | ^ diff --git a/vlib/v/checker/tests/globals/nested_unknown_typ.vv b/vlib/v/checker/tests/globals/nested_unknown_typ.vv new file mode 100644 index 000000000..fa14b9060 --- /dev/null +++ b/vlib/v/checker/tests/globals/nested_unknown_typ.vv @@ -0,0 +1,5 @@ +@[has_globals] +module main + +@[markused] +__global ga []?StructS -- 2.39.5