Partial implementation of C++11 thread_local.
commitb1db7f9139c8a0915f81359eefc10c6187d6145c
authorJason Merrill <jason@redhat.com>
Mon, 8 Oct 2012 14:45:12 +0000 (8 10:45 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 8 Oct 2012 14:45:12 +0000 (8 10:45 -0400)
tree9d034ef53452ac43a609b044b8e683a39f49e1be
parent2991392b555fb18a312aef719f3ea379d7615fef
Partial implementation of C++11 thread_local.

c-family/
* c-common.c (c_common_reswords): Add thread_local.
cp/
* decl.c (cp_finish_decl): Remove errors about non-trivial
initialization and destruction of TLS variables.
(register_dtor_fn): Add sorry about TLS variables.
(expand_static_init): Add sorry about non-local TLS variables,
or error with __thread.
Don't emit thread-safety guards for local TLS variables.
(grokdeclarator): thread_local in a function implies static.
* decl.h: Adjust prototype.
* decl2.c (get_guard): Copy DECL_TLS_MODEL.
* parser.c (cp_parser_set_storage_class, cp_parser_set_decl_spec_type)
(set_and_check_decl_spec_loc): Take the token rather than the location.
Distinguish between __thread and thread_local.
(cp_parser_set_storage_class): Don't complain about thread_local before
extern/static.
(token_is__thread): New.
* call.c (make_temporary_var_for_ref_to_temp): Handle TLS.
* cp-tree.h (DECL_GNU_TLS_P): New.
(cp_decl_specifier_seq): Add gnu_thread_keyword_p.

From-SVN: r192209
14 files changed:
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl.h
gcc/cp/decl2.c
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tls/init-2.C
gcc/testsuite/g++.dg/tls/thread_local1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tls/thread_local2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/tls/thread_local7.C [new file with mode: 0644]