diff options
| author | gingerBill <bill@gingerbill.org> | 2021-12-17 11:06:17 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-12-17 11:06:17 +0000 |
| commit | 0548db423067bce16d45af651819bf56feb5d411 (patch) | |
| tree | 15cec12292e5d9b79cfc30c97c11af697eb91610 | |
| parent | aba6d2e52c7fb2c87f05e5e2926e6b245b55bccd (diff) | |
Disallow `@(static)` and `@(thread_local)` within `defer` statements
| -rw-r--r-- | src/check_stmt.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 1a424240c..396388629 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -2243,6 +2243,9 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { error(e->token, "The 'static' attribute is not allowed to be applied to '_'"); } else { e->flags |= EntityFlag_Static; + if (ctx->in_defer) { + error(e->token, "'static' variables cannot be declared within a defer statement"); + } } } if (ac.thread_local_model != "") { @@ -2251,9 +2254,13 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { error(e->token, "The 'thread_local' attribute is not allowed to be applied to '_'"); } else { e->flags |= EntityFlag_Static; + if (ctx->in_defer) { + error(e->token, "'thread_local' variables cannot be declared within a defer statement"); + } } e->Variable.thread_local_model = ac.thread_local_model; } + if (ac.is_static && ac.thread_local_model != "") { error(e->token, "The 'static' attribute is not needed if 'thread_local' is applied"); |