| author | |
| committer | |
| log | 91fe0b80a22b43cd56e7fb747311d50f2fcd5441 |
| tree | 9fa785517c1a251315882857ccd80529c290649f |
| parent | 757db665a79d7885d1c8f83df65a25adc7af9a69 |
4 files changed, 4 insertions(+), 9 deletions(-)
lib/include/zig.h+1-1| ... | ... | @@ -19,7 +19,7 @@ |
| 19 | 19 | #endif |
| 20 | 20 | |
| 21 | 21 | #if __STDC_VERSION__ >= 201112L |
| 22 | #define zig_threadlocal thread_local | |
| 22 | #define zig_threadlocal _Thread_local | |
| 23 | 23 | #elif defined(__GNUC__) |
| 24 | 24 | #define zig_threadlocal __thread |
| 25 | 25 | #elif _MSC_VER |
src/codegen/c.zig+3-6| ... | ... | @@ -2236,12 +2236,6 @@ pub fn genDecl(o: *Object) !void { |
| 2236 | 2236 | const variable: *Module.Var = var_payload.data; |
| 2237 | 2237 | const is_global = o.dg.declIsGlobal(tv) or variable.is_extern; |
| 2238 | 2238 | const fwd_decl_writer = o.dg.fwd_decl.writer(); |
| 2239 | if (is_global) { | |
| 2240 | try fwd_decl_writer.writeAll("zig_extern_c "); | |
| 2241 | } | |
| 2242 | if (variable.is_threadlocal) { | |
| 2243 | try fwd_decl_writer.writeAll("zig_threadlocal "); | |
| 2244 | } | |
| 2245 | 2239 | |
| 2246 | 2240 | const decl_c_value: CValue = if (is_global) .{ |
| 2247 | 2241 | .bytes = mem.span(o.dg.decl.name), |
| ... | ... | @@ -2249,6 +2243,8 @@ pub fn genDecl(o: *Object) !void { |
| 2249 | 2243 | .decl = o.dg.decl_index, |
| 2250 | 2244 | }; |
| 2251 | 2245 | |
| 2246 | if (is_global) try fwd_decl_writer.writeAll("zig_extern_c "); | |
| 2247 | if (variable.is_threadlocal) try fwd_decl_writer.writeAll("zig_threadlocal "); | |
| 2252 | 2248 | try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete); |
| 2253 | 2249 | try fwd_decl_writer.writeAll(";\n"); |
| 2254 | 2250 | |
| ... | ... | @@ -2257,6 +2253,7 @@ pub fn genDecl(o: *Object) !void { |
| 2257 | 2253 | } |
| 2258 | 2254 | |
| 2259 | 2255 | const w = o.writer(); |
| 2256 | if (variable.is_threadlocal) try w.writeAll("zig_threadlocal "); | |
| 2260 | 2257 | try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete); |
| 2261 | 2258 | try w.writeAll(" = "); |
| 2262 | 2259 | if (variable.init.tag() != .unreachable_value) { |
test/behavior/basic.zig-1| ... | ... | @@ -725,7 +725,6 @@ test "comptime manyptr concatenation" { |
| 725 | 725 | } |
| 726 | 726 | |
| 727 | 727 | test "thread local variable" { |
| 728 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | |
| 729 | 728 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 730 | 729 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 731 | 730 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
test/behavior/bugs/7250.zig-1| ... | ... | @@ -14,7 +14,6 @@ threadlocal var g_uart0 = nrfx_uart_t{ |
| 14 | 14 | }; |
| 15 | 15 | |
| 16 | 16 | test "reference a global threadlocal variable" { |
| 17 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | |
| 18 | 17 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 19 | 18 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 20 | 19 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |