From 019bf9ada3c2e58041e50d087ae564fbb812f096 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Sat, 9 Sep 2017 15:32:25 +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. * g++.dg/cpp1z/feat-cxx1z.C: Likewise. From-SVN: r251939 --- gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c-cppbuiltin.c | 2 ++ gcc/testsuite/ChangeLog | 9 +++++++++ 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 +++++++- gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C | 6 ++++++ 8 files changed, 49 insertions(+), 1 deletion(-) diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 9886dcd86b2..3d959492d11 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2017-09-09 Jonathan Wakely + + PR c++/81852 + * c-cppbuiltin.c (c_cpp_builtins): Define __cpp_threadsafe_static_init. + 2017-09-04 Marek Polacek PR c/81783 diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c index 8f377f698a6..4330c9102d9 100644 --- a/gcc/c-family/c-cppbuiltin.c +++ b/gcc/c-family/c-cppbuiltin.c @@ -987,6 +987,8 @@ c_cpp_builtins (cpp_reader *pfile) } if (flag_new_ttp) cpp_define (pfile, "__cpp_template_template_args=201611"); + 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 35aadc7952d..fdd128c58cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2017-09-09 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. + * g++.dg/cpp1z/feat-cxx1z.C: Likewise. + 2017-09-09 Pierre-Marie de Rodat * gnat.dg/debug14.adb: New test. diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C index 98112218d8f..b18fcfabad4 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 3b141ef67c4..412b9a33b8f 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C @@ -118,6 +118,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 d15e7aadcee..4db499cc2f4 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 9f4a0412403..5e95418dfe4 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 diff --git a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C index e424e1c0ff0..a7c6cfe5169 100644 --- a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C +++ b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C @@ -106,6 +106,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 -- 2.30.2