aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorflysand7 <thebumboni@gmail.com>2025-01-17 01:12:23 +0300
committerflysand7 <thebumboni@gmail.com>2025-01-17 01:12:23 +0300
commit4f0206ce08593628bf9458b623f61c2989558f69 (patch)
tree1975f14ce2f710f48530affb629c71a83182ec44 /src/check_expr.cpp
parentaa3f0b86c143802d9e81122698e38361751c7a68 (diff)
Added compile-time checks for thread locals with -no-crt
Now using any thread-local variables with -no-crt enabled will cause a compiler error, unless -no-thread-local is given. Also fixed a minor typo in a comment.
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 231ece2f4..7574c20a7 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -1044,7 +1044,7 @@ gb_internal AstPackage *get_package_of_type(Type *type) {
}
-// NOTE(bill): 'content_name' is for debugging and error messages
+// NOTE(bill): 'context_name' is for debugging and error messages
gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *type, String context_name) {
check_not_tuple(c, operand);
if (operand->mode == Addressing_Invalid) {
@@ -1822,6 +1822,19 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam
break;
case Entity_Variable:
+ if (e->kind == Entity_Variable && build_context.no_crt && !build_context.no_thread_local && e->Variable.thread_local_model != "") {
+ switch (build_context.metrics.os) {
+ case TargetOs_linux:
+ case TargetOs_darwin:
+ case TargetOs_essence:
+ case TargetOs_freebsd:
+ case TargetOs_openbsd:
+ case TargetOs_netbsd:
+ case TargetOs_haiku:
+ Token token = ast_token(n);
+ error(token, "Illegal usage of thread locals: '%.*s'", LIT(e->token.string));
+ }
+ }
e->flags |= EntityFlag_Used;
if (type == t_invalid) {
o->type = t_invalid;