http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50598
--- Comment #7 from Iain Sandoe <iains at gcc dot gnu.org> 2011-11-03 18:22:05
UTC ---
$ more ../gcc-live-trunk/libgomp/testsuite/libgomp.c++/pr24455-1.C
// { dg-do compile }
// { dg-require-effective-target tls }
extern int i;
#pragma omp threadprivate (i)
int i;
===
if this is compiled with "-x c " we get:
$ more pr24455-1.s .text
__GLOBAL__sub_I_65535_0_pr24455_1.C:
pushl %ebx
subl $24, %esp
call ___x86.get_pc_thunk.bx
L00000000001$pb:
movl $0, 12(%esp)
movl $4, 8(%esp)
movl $4, 4(%esp)
movl L___emutls_v.i$non_lazy_ptr-L00000000001$pb(%ebx), %eax
movl %eax, (%esp)
call ___emutls_register_common
addl $24, %esp
popl %ebx
ret
.mod_init_func
.align 2
.long __GLOBAL__sub_I_65535_0_pr24455_1.C
.comm ___emutls_v.i,16,2
.section __TEXT,__textcoal_nt,coalesced,pure_instructions
.weak_definition ___x86.get_pc_thunk.bx
.private_extern ___x86.get_pc_thunk.bx
___x86.get_pc_thunk.bx:
movl (%esp), %ebx
ret
.section __IMPORT,__pointers,non_lazy_symbol_pointers
L___emutls_v.i$non_lazy_ptr:
.indirect_symbol ___emutls_v.i
.long 0
.subsections_via_symbols
====
if compiled with g++ we get an empty body (as per comment #4).
the tree-dumps are not very interesting - because the tu shows as empty ...
I'm guessing that somehow g++ is dropping the extern .. which allows the
revised version of cgraphunit to prune the variable .. but I'm not sure how to
go about debugging this at the moment ...