authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-10-31 22:31:47-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-01 20:38:51-04:00
log91fe0b80a22b43cd56e7fb747311d50f2fcd5441
tree9fa785517c1a251315882857ccd80529c290649f
parent757db665a79d7885d1c8f83df65a25adc7af9a69

cbe: fix threadlocal


4 files changed, 4 insertions(+), 9 deletions(-)

lib/include/zig.h+1-1
...@@ -19,7 +19,7 @@...@@ -19,7 +19,7 @@
19#endif19#endif
2020
21#if __STDC_VERSION__ >= 201112L21#if __STDC_VERSION__ >= 201112L
22#define zig_threadlocal thread_local22#define zig_threadlocal _Thread_local
23#elif defined(__GNUC__)23#elif defined(__GNUC__)
24#define zig_threadlocal __thread24#define zig_threadlocal __thread
25#elif _MSC_VER25#elif _MSC_VER
src/codegen/c.zig+3-6
...@@ -2236,12 +2236,6 @@ pub fn genDecl(o: *Object) !void {...@@ -2236,12 +2236,6 @@ pub fn genDecl(o: *Object) !void {
2236 const variable: *Module.Var = var_payload.data;2236 const variable: *Module.Var = var_payload.data;
2237 const is_global = o.dg.declIsGlobal(tv) or variable.is_extern;2237 const is_global = o.dg.declIsGlobal(tv) or variable.is_extern;
2238 const fwd_decl_writer = o.dg.fwd_decl.writer();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 }
22452239
2246 const decl_c_value: CValue = if (is_global) .{2240 const decl_c_value: CValue = if (is_global) .{
2247 .bytes = mem.span(o.dg.decl.name),2241 .bytes = mem.span(o.dg.decl.name),
...@@ -2249,6 +2243,8 @@ pub fn genDecl(o: *Object) !void {...@@ -2249,6 +2243,8 @@ pub fn genDecl(o: *Object) !void {
2249 .decl = o.dg.decl_index,2243 .decl = o.dg.decl_index,
2250 };2244 };
22512245
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 try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);2248 try o.dg.renderTypeAndName(fwd_decl_writer, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);
2253 try fwd_decl_writer.writeAll(";\n");2249 try fwd_decl_writer.writeAll(";\n");
22542250
...@@ -2257,6 +2253,7 @@ pub fn genDecl(o: *Object) !void {...@@ -2257,6 +2253,7 @@ pub fn genDecl(o: *Object) !void {
2257 }2253 }
22582254
2259 const w = o.writer();2255 const w = o.writer();
2256 if (variable.is_threadlocal) try w.writeAll("zig_threadlocal ");
2260 try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);2257 try o.dg.renderTypeAndName(w, o.dg.decl.ty, decl_c_value, .Mut, o.dg.decl.@"align", .Complete);
2261 try w.writeAll(" = ");2258 try w.writeAll(" = ");
2262 if (variable.init.tag() != .unreachable_value) {2259 if (variable.init.tag() != .unreachable_value) {
test/behavior/basic.zig-1
...@@ -725,7 +725,6 @@ test "comptime manyptr concatenation" {...@@ -725,7 +725,6 @@ test "comptime manyptr concatenation" {
725}725}
726726
727test "thread local variable" {727test "thread local variable" {
728 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
729 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO728 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
730 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO729 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
731 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO730 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,7 +14,6 @@ threadlocal var g_uart0 = nrfx_uart_t{
14};14};
1515
16test "reference a global threadlocal variable" {16test "reference a global threadlocal variable" {
17 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
18 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO17 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
19 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO18 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
20 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO19 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO