Selaa lähdekoodia

Error if -no-thread-local is used in presence of -no-crt on Unix

flysand7 7 kuukautta sitten
vanhempi
commit
3f20b63243
2 muutettua tiedostoa jossa 10 lisäystä ja 18 poistoa
  1. 10 5
      src/build_settings.cpp
  2. 0 13
      src/check_expr.cpp

+ 10 - 5
src/build_settings.cpp

@@ -2124,6 +2124,7 @@ gb_internal bool init_build_paths(String init_filename) {
 		}
 	}
 
+	bool no_crt_checks_failed = false;
 	if (build_context.no_crt && !build_context.ODIN_DEFAULT_TO_NIL_ALLOCATOR && !build_context.ODIN_DEFAULT_TO_PANIC_ALLOCATOR) {
 		switch (build_context.metrics.os) {
 		case TargetOs_linux:
@@ -2133,12 +2134,12 @@ gb_internal bool init_build_paths(String init_filename) {
 		case TargetOs_openbsd:
 		case TargetOs_netbsd:
 		case TargetOs_haiku:
-			gb_printf_err("-no-crt on unix systems requires either -default-to-nil-allocator or -default-to-panic-allocator to also be present, because the default allocator requires crt\n");
-			return false;
+			gb_printf_err("-no-crt on Unix systems requires either -default-to-nil-allocator or -default-to-panic-allocator to also be present, because the default allocator requires CRT\n");
+			no_crt_checks_failed = true;
 		}
 	}
 
-	if (build_context.no_crt && !build_context.no_thread_local && !build_context.ODIN_DEFAULT_TO_NIL_ALLOCATOR) {
+	if (build_context.no_crt && !build_context.no_thread_local) {
 		switch (build_context.metrics.os) {
 		case TargetOs_linux:
 		case TargetOs_darwin:
@@ -2147,11 +2148,15 @@ gb_internal bool init_build_paths(String init_filename) {
 		case TargetOs_openbsd:
 		case TargetOs_netbsd:
 		case TargetOs_haiku:
-			gb_printf_err("-no-crt on unix systems requires either -default-to-nil-allocator or -no-thread-local to also be present, because the temporary allocator is a thread local, which are inaccessible without CRT initializing TLS\n");
-			return false;
+			gb_printf_err("-no-crt on Unix systems requires the -no-thread-local flag to also be present, because the TLS is inaccessible without CRT\n");
+			no_crt_checks_failed = true;
 		}
 	}
 
+	if (no_crt_checks_failed) {
+		return false;
+	}
+
 	return true;
 }
 

+ 0 - 13
src/check_expr.cpp

@@ -1822,19 +1822,6 @@ 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;