From c1ea4dd9291079f34de278875c9021485c87bbef Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Mon, 11 Sep 2017 11:44:11 +0100 Subject: [PATCH] PR c++/81852 define feature-test macro for -fthreadsafe-statics gcc/c-family: PR c++/81852 * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_threadsafe_static_init. gcc/testsuite: PR c++/81852 * g++.dg/cpp1y/feat-cxx11.C: Check __cpp_threadsafe_static_init. * g++.dg/cpp1y/feat-cxx14.C: Likewise. * g++.dg/cpp1y/feat-cxx98.C: Likewise. * g++.dg/cpp1y/feat-neg.C: Likewise. From-SVN: r251975 --- gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c-cppbuiltin.c | 2 ++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C | 6 ++++++ gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C | 6 ++++++ gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C | 8 ++++++++ gcc/testsuite/g++.dg/cpp1y/feat-neg.C | 8 +++++++- 7 files changed, 42 insertions(+), 1 deletion(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index f32254a5e037..1a22975acefe 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2017-09-11 Jonathan Wakely + + PR c++/81852 + * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_threadsafe_static_init. + 2017-05-30 Jakub Jelinek Backported from mainline diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index 2ab7727b6b1e..f9365ace2ba5 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -879,6 +879,8 @@ c_cpp_builtins (cpp_reader *pfile) } if (flag_sized_deallocation) cpp_define (pfile, "__cpp_sized_deallocation=201309"); + if (flag_threadsafe_statics) + cpp_define (pfile, "__cpp_threadsafe_static_init=200806"); } /* Note that we define this for C as well, so that we know if __attribute__((cleanup)) will interface with EH. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8556eabccbcb..f229b5fb9c70 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-09-11 Jonathan Wakely + + PR c++/81852 + * g++.dg/cpp1y/feat-cxx11.C: Check __cpp_threadsafe_static_init. + * g++.dg/cpp1y/feat-cxx14.C: Likewise. + * g++.dg/cpp1y/feat-cxx98.C: Likewise. + * g++.dg/cpp1y/feat-neg.C: Likewise. + 2017-09-06 Bill Schmidt Backport from mainline: diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C index 53e7ded39ddb..492df56a8b15 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C @@ -125,6 +125,12 @@ # error "__cpp_alias_templates != 200704" #endif +#ifndef __cpp_threadsafe_static_init +# error "__cpp_threadsafe_static_init" +#elif __cpp_threadsafe_static_init != 200806 +# error "__cpp_threadsafe_static_init != 200806" +#endif + // C++14 features allowed in C++11 in non-ANSI modes: #ifndef __cpp_binary_literals diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C index 29b07948fff1..346433122eab 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C @@ -119,6 +119,12 @@ # error "__cpp_alias_templates != 200704" #endif +#ifndef __cpp_threadsafe_static_init +# error "__cpp_threadsafe_static_init" +#elif __cpp_threadsafe_static_init != 200806 +# error "__cpp_threadsafe_static_init != 200806" +#endif + // C++14 features: #ifndef __cpp_binary_literals diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C index d15e7aadcee1..4db499cc2f46 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98.C @@ -15,6 +15,14 @@ # error "__cpp_exceptions != 199711" #endif +// C++11 features allowed in C++98: + +#ifndef __cpp_threadsafe_static_init +# error "__cpp_threadsafe_static_init" +#elif __cpp_threadsafe_static_init != 200806 +# error "__cpp_threadsafe_static_init != 200806" +#endif + // C++14 features allowed in C++98 in non-ANSI modes: #ifndef __cpp_binary_literals diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-neg.C index 9f4a04124039..5e95418dfe48 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-neg.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-fno-rtti -fno-exceptions" } +// { dg-options "-fno-rtti -fno-exceptions -fno-threadsafe-statics" } // C++98 features with explicit opt-out: @@ -10,3 +10,9 @@ #ifndef __cpp_exceptions # error "__cpp_exceptions" // { dg-error "error" } #endif + +// C++11 features with explicit opt-out: + +#ifndef __cpp_threadsafe_static_init +# error "__cpp_threadsafe_static_init" // { dg-error "error" } +#endif -- 2.47.2