aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.h
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2023-03-20 20:29:47 +0100
committerJakub Jelinek <jakub@redhat.com>2023-03-20 20:29:47 +0100
commit0a846340b99675d57fc2f2923a0412134eed09d3 (patch)
treeee607d45ce282300d1b4ad85fa2151471d669d48 /gcc/value-range.h
parentc67f312d20e15e5aa18c587693b4ab7e131596c1 (diff)
downloadgcc-0a846340b99675d57fc2f2923a0412134eed09d3.zip
gcc-0a846340b99675d57fc2f2923a0412134eed09d3.tar.gz
gcc-0a846340b99675d57fc2f2923a0412134eed09d3.tar.bz2
c++: Drop TREE_READONLY on vars (possibly) initialized by tls wrapper [PR109164]
The following two testcases are miscompiled, because we keep TREE_READONLY on the vars even when they are (possibly) dynamically initialized by a TLS wrapper function. Normally cp_finish_decl drops TREE_READONLY from vars which need dynamic initialization, but for TLS we do this kind of initialization upon every access to those variables. Keeping them TREE_READONLY means e.g. PRE can hoist loads from those before loops which contain the TLS wrapper calls, so we can access the TLS variables before they are initialized. 2023-03-20 Jakub Jelinek <jakub@redhat.com> PR c++/109164 * cp-tree.h (var_needs_tls_wrapper): Declare. * decl2.cc (var_needs_tls_wrapper): No longer static. * decl.cc (cp_finish_decl): Clear TREE_READONLY on TLS variables for which a TLS wrapper will be needed. * g++.dg/tls/thread_local13.C: New test. * g++.dg/tls/thread_local13-aux.cc: New file. * g++.dg/tls/thread_local14.C: New test. * g++.dg/tls/thread_local14-aux.cc: New file.
Diffstat (limited to 'gcc/value-range.h')
0 files changed, 0 insertions, 0 deletions