Commit 59de23dfa0

LemonBoy <thatlemon@gmail.com>
2019-12-15 19:25:41
Don't assume TLS storage has a fixed address
Fixes #3433
1 parent b169f7b
Changed files (2)
src
test
stage1
behavior
src/ir.cpp
@@ -17395,7 +17395,7 @@ static IrInstruction *ir_get_var_ptr(IrAnalyze *ira, IrInstruction *instruction,
     result->value->type = get_pointer_to_type_extra(ira->codegen, var->var_type,
             var->src_is_const, is_volatile, PtrLenSingle, var->align_bytes, 0, 0, false);
 
-    if (linkage_makes_it_runtime)
+    if (linkage_makes_it_runtime || var->is_thread_local)
         goto no_mem_slot;
 
     if (value_is_comptime(var->const_value)) {
test/stage1/behavior/misc.zig
@@ -773,3 +773,11 @@ test "result location is optional inside error union" {
     const x = maybe(true) catch unreachable;
     expect(x.? == 42);
 }
+
+threadlocal var buffer: [11]u8 = undefined;
+
+test "pointer to thread local array" {
+    const s = "Hello world";
+    std.mem.copy(u8, buffer[0..], s);
+    std.testing.expectEqualSlices(u8, buffer[0..], s);
+}