From: Jakub Jelinek Date: Tue, 30 May 2017 07:41:57 +0000 (+0200) Subject: backport: re PR c++/77285 (extern thread_local linkage) X-Git-Tag: releases/gcc-5.5.0~287 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7491394a912df22fd1737f16f045924bdc9ef6f;p=thirdparty%2Fgcc.git backport: re PR c++/77285 (extern thread_local linkage) Backported from mainline 2016-11-18 Jakub Jelinek PR c++/77285 * mangle.c (mangle_tls_init_fn, mangle_tls_wrapper_fn): Call check_abi_tags. * g++.dg/tls/pr77285-1.C: New test. * g++.dg/tls/pr77285-2.C: New test. From-SVN: r248624 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 223b029bf9e4..98bb4fc0b0ab 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-11-18 Jakub Jelinek + + PR c++/77285 + * mangle.c (mangle_tls_init_fn, mangle_tls_wrapper_fn): Call + check_abi_tags. + 2016-10-31 Jakub Jelinek PR c++/78089 diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 4e0ed225d76b..5ad7bb7a96bc 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -3881,6 +3881,7 @@ mangle_guard_variable (const tree variable) tree mangle_tls_init_fn (const tree variable) { + check_abi_tags (variable); start_mangling (variable); write_string ("_ZTH"); write_guarded_var_name (variable); @@ -3895,6 +3896,7 @@ mangle_tls_init_fn (const tree variable) tree mangle_tls_wrapper_fn (const tree variable) { + check_abi_tags (variable); start_mangling (variable); write_string (TLS_WRAPPER_PREFIX); write_guarded_var_name (variable); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78d6ccf89c43..a26f8973f937 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-11-18 Jakub Jelinek + + PR c++/77285 + * g++.dg/tls/pr77285-1.C: New test. + * g++.dg/tls/pr77285-2.C: New test. + 2016-11-16 Jakub Jelinek PR rtl-optimization/78378 diff --git a/gcc/testsuite/g++.dg/tls/pr77285-1.C b/gcc/testsuite/g++.dg/tls/pr77285-1.C new file mode 100644 index 000000000000..d8f69b2010ce --- /dev/null +++ b/gcc/testsuite/g++.dg/tls/pr77285-1.C @@ -0,0 +1,7 @@ +// { dg-do link { target c++11 } } +// { dg-require-effective-target tls } +// { dg-additional-sources pr77285-2.C } + +struct __attribute__((abi_tag("tag"))) X { ~X () {} int i = 0; }; +thread_local X var1; +X var2; diff --git a/gcc/testsuite/g++.dg/tls/pr77285-2.C b/gcc/testsuite/g++.dg/tls/pr77285-2.C new file mode 100644 index 000000000000..bac273a4d683 --- /dev/null +++ b/gcc/testsuite/g++.dg/tls/pr77285-2.C @@ -0,0 +1,17 @@ +// PR c++/77285 +// { dg-do compile { target c++11 } } +// { dg-require-effective-target tls } +// { dg-final { scan-assembler "_Z4var1B3tag" } } +// { dg-final { scan-assembler "_Z4var2B3tag" } } +// { dg-final { scan-assembler "_ZTH4var1B3tag" } } +// { dg-final { scan-assembler "_ZTW4var1B3tag" } } + +struct __attribute__((abi_tag("tag"))) X { ~X () {} int i = 0; }; +extern thread_local X var1; +extern X var2; + +int +main () +{ + return var1.i + var2.i; +}