Don't assume TLS storage has a fixed address

Fixes #3433
This commit is contained in:
LemonBoy 2019-12-15 19:25:41 +01:00 committed by Andrew Kelley
parent b169f7b0d5
commit 59de23dfa0
2 changed files with 9 additions and 1 deletions

View File

@ -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)) {

View File

@ -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);
}