diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-05-03 14:39:54 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-05-03 14:39:54 -0400 |
| commit | bd9c629c4c306c9159a5e6ad16fe5637d2bc6dbf (patch) | |
| tree | f7f07bc1a38c20e4ebb77a4e4445b3c73213ff33 /src | |
| parent | 8cda4fd73a91e7bd678e69dbfbc0b46d15d116d4 (diff) | |
| download | zig-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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.cpp | 2 |
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); } } |
