https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80881
--- Comment #10 from Liu Hao <lh_mouse at 126 dot com> --- Compiling this rather simple program using your gcc: ``` __thread int a = 1; int get_a(void){ return a; } ``` resulted in wrong assembly: ``` E:\Desktop\gcc-7.1.0-debug-broken-tls\bin>gcc E:\Desktop\test.c -S -masm=intel -O2 -o - .file "test.c" .intel_syntax noprefix .text .p2align 4,,15 .globl get_a .def get_a; .scl 2; .type 32; .endef .seh_proc get_a get_a: .seh_endprologue mov rax, QWORD PTR fs:0 mov eax, DWORD PTR a@tpoff[rax] ret .seh_endproc .globl a .data .align 4 a: .long 1 .ident "GCC: (GNU) 7.1.0" ``` With my working GCC it resulted in: ``` E:\Desktop>gcc E:\Desktop\test.c -S -masm=intel -O2 -o - .file "test.c" .intel_syntax noprefix .text .globl get_a .def get_a; .scl 2; .type 32; .endef .seh_proc get_a get_a: sub rsp, 40 .seh_stackalloc 40 .seh_endprologue lea rcx, __emutls_v.a[rip] call __emutls_get_address mov eax, DWORD PTR [rax] add rsp, 40 ret .seh_endproc .section .rdata,"dr" .align 4 __emutls_t.a: .long 1 .globl __emutls_v.a .data .align 32 __emutls_v.a: .quad 4 .quad 4 .quad 0 .quad __emutls_t.a .ident "GCC: (gcc-7-branch HEAD with MCF thread model, built by LH_Mouse.) 7.2.1 20171119" .def __emutls_get_address; .scl 2; .type 32; .endef ```