aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-03 14:39:54 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-03 14:39:54 -0400
commitbd9c629c4c306c9159a5e6ad16fe5637d2bc6dbf (patch)
treef7f07bc1a38c20e4ebb77a4e4445b3c73213ff33
parent8cda4fd73a91e7bd678e69dbfbc0b46d15d116d4 (diff)
downloadzig-bd9c629c4c306c9159a5e6ad16fe5637d2bc6dbf.tar.gz
zig-bd9c629c4c306c9159a5e6ad16fe5637d2bc6dbf.zip
always respect threadlocal for variables with external linkage
Previously if you had, for example: extern "c" threadlocal var errno: c_int; This would turn errno into a normal variable for --single-threaded builds. However for variables with external linkage, there is an ABI to uphold. This is needed to make errno work for DragonFly BSD. See #2381.
-rw-r--r--src/codegen.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 9eeee1dee1..7dfdf71725 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -6639,7 +6639,7 @@ static void validate_inline_fns(CodeGen *g) {
}
static void set_global_tls(CodeGen *g, ZigVar *var, LLVMValueRef global_value) {
- if (var->is_thread_local && !g->is_single_threaded) {
+ if (var->is_thread_local && (!g->is_single_threaded || var->linkage != VarLinkageInternal)) {
LLVMSetThreadLocalMode(global_value, LLVMGeneralDynamicTLSModel);
}
}