diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-08-08 12:10:01 +0100 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2025-08-08 12:10:01 +0100 |
| commit | 7642e0a0e0bb0ff79da6ac7a2ba3b787afa32b78 (patch) | |
| tree | aec4baaf441f58b3c6c9a8a55c61e5f8c6218f4b /src | |
| parent | 3194fda8f3b01affc086eec4102d924277fe9f43 (diff) | |
Require `@(init)` and `@(fini)` to be `proc "contextless" ()`
Diffstat (limited to 'src')
| -rw-r--r-- | src/checker.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index a13290750..f631a1412 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2675,6 +2675,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st is_init = false; } + if (t->Proc.calling_convention != ProcCC_Contextless) { + error(e->token, "@(init) procedures must be declared as \"contextless\""); + } + if ((e->scope->flags & (ScopeFlag_File|ScopeFlag_Pkg)) == 0) { error(e->token, "@(init) procedures must be declared at the file scope"); is_init = false; @@ -2689,6 +2693,7 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st error(e->token, "An @(init) procedure must not use a blank identifier as its name"); } + if (is_init) { add_dependency_to_set(c, e); array_add(&c->info.init_procedures, e); @@ -2706,6 +2711,10 @@ gb_internal void generate_minimum_dependency_set_internal(Checker *c, Entity *st is_fini = false; } + if (t->Proc.calling_convention != ProcCC_Contextless) { + error(e->token, "@(fini) procedures must be declared as \"contextless\""); + } + if ((e->scope->flags & (ScopeFlag_File|ScopeFlag_Pkg)) == 0) { error(e->token, "@(fini) procedures must be declared at the file scope"); is_fini = false; |