aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-01-17 13:22:47 +0000
committerGitHub <noreply@github.com>2025-01-17 13:22:47 +0000
commitfcd3cf7fa815a605e89dac40dd01a9a70e257110 (patch)
tree6079ba5427dedf384107d691c63a7a881f9c3cc2 /src
parent16eca1ded12373cd5a106d20796458a374940771 (diff)
parent3f20b6324353cfb9e3ad27fe9ee5f8d07148911b (diff)
Merge pull request #4704 from flysand7/4614-thread-locals
Error if `-no-crt` is used without `-no-thread-locals`
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp23
-rw-r--r--src/check_expr.cpp2
-rw-r--r--src/main.cpp4
3 files changed, 26 insertions, 3 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 93168cf77..a8d06d56d 100644
--- a/src/build_settings.cpp
+++ b/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,11 +2134,29 @@ 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) {
+ 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:
+ 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;
}
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 231ece2f4..349c5dbae 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) {
diff --git a/src/main.cpp b/src/main.cpp
index 1de5d987b..24e33850e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2334,6 +2334,10 @@ gb_internal void print_show_help(String const arg0, String command, String optio
print_usage_line(2, "Sets the default allocator to be the nil_allocator, an allocator which does nothing.");
}
+ if (print_flag("-default-to-panic-allocator")) {
+ print_usage_line(2, "Sets the default allocator to be the panic_allocator, an allocator which calls panic() on any allocation attempt.");
+ }
+
if (print_flag("-define:<name>=<value>")) {
print_usage_line(2, "Defines a scalar boolean, integer or string as global constant.");
print_usage_line(2, "Example: -define:SPAM=123");