[Bug middle-end/55563] New: OpenMP not marking variable as thread-local
dje at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Dec 2 17:16:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55563
Bug #: 55563
Summary: OpenMP not marking variable as thread-local
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: dje@gcc.gnu.org
OpenMP threadprivate variables are not marked as thread-local at time when pool
storage is chosen. For example, libgomp.c/copyin-1.c
int thr = 32;
#pragma omp threadprivate (thr)
In varasm.c:use_blocks_for_decl_p(), the variable thread is marked as
TLS_MODEL_NONE
Breakpoint 2, _ZL21use_blocks_for_decl_pP9tree_node (decl=0x701634e0)
at /nasfarm/dje/src/src/gcc/varasm.c:1116
1116 return targetm.use_blocks_for_decl_p (decl);
(gdb) print decl
$9 = (tree) 0x701634e0
(gdb) print debug_tree(decl)
<var_decl 701634e0 thr
type <integer_type 700153c0 int public SI
size <integer_cst 700065e0 constant 32>
unit size <integer_cst 70006600 constant 4>
align 32 symtab 0 alias set -1 canonical type 700153c0 precision 32 min
<integer_cst 70006900 -2147483648> max <integer_cst 70006920 2147483647>
pointer_to_this <pointer_type 70015ae0>>
public static SI file copyin-1.c line 8 col 5 size <integer_cst 700065e0
32> unit size <integer_cst 70006600 4>
align 32 initial <integer_cst 700f8660 32>>
$10 = 10
(gdb) print decl->decl_with_vis.tls_model
$11 = TLS_MODEL_NONE
This does not happen with variables declared with __thread, but does with
OpenMP and variables annotated using #pragma.
The variable later is transformed to TLS, but wrong choices have been made and
the now TLS variable is defined incorrectly in the assembly file.
More information about the Gcc-bugs
mailing list