Message ID | 20241031201052.1628008-1-jwakely@redhat.com |
---|---|
State | New |
Headers | show |
Series | libstdc++: Deprecate useless <cxxx> compatibility headers for C++17 | expand |
On 10/31/24 4:09 PM, Jonathan Wakely wrote: > Tested x86_64-linux. Is the g++ test change OK? Yes. > Also available for review at: > https://forge.sourceware.org/gcc/gcc-TEST/pulls/4 > > -- >8 -- > > These headers make no sense for C++ programs, because they either define > different content to the corresponding <xxx.h> C header, or define > nothing at all in namespace std. They were all deprecated in C++17, so > add deprecation warnings to them, which can be disabled with > -Wno-deprecated. For C++20 and later these headers are no longer in the > standard at all, so compiling with _GLIBCXX_USE_DEPRECATED defined to 0 > will give an error when they are included. > > Because #warning is non-standard before C++23 we need to use pragmas to > ignore -Wc++23-extensions for the -Wsystem-headers -pedantic case. > > One g++ test needs adjustment because it includes <ciso646>, but that > can be made conditional on the __cplusplus value without any reduction > in test coverage. > > For the library tests, consolidate the std_c++0x_neg.cc XFAIL tests into > the macros.cc test, using dg-error with a { target c++98_only } > selector. This avoids having two separate test files, one for C++98 and > one for everything later. Also add tests for the <xxx.h> headers to > ensure that they behave as expected and don't give deprecated warnings. > > libstdc++-v3/ChangeLog: > > * doc/xml/manual/evolution.xml: Document deprecations. > * doc/html/*: Regenerate. > * include/c_compatibility/complex.h (_GLIBCXX_COMPLEX_H): Move > include guard to start of file. Include <complex> directly > instead of <ccomplex>. > * include/c_compatibility/tgmath.h: Include <cmath> and > <complex> directly, instead of <ctgmath>. > * include/c_global/ccomplex: Add deprecated #warning for C++17 > and #error for C++20 if _GLIBCXX_USE_DEPRECATED == 0. > * include/c_global/ciso646: Likewise. > * include/c_global/cstdalign: Likewise. > * include/c_global/cstdbool: Likewise. > * include/c_global/ctgmath: Likewise. > * include/c_std/ciso646: Likewise. > * include/precompiled/stdc++.h: Do not include ccomplex, > ciso646, cstdalign, cstdbool, or ctgmath in C++17 and later. > * testsuite/18_support/headers/cstdalign/macros.cc: Check for > warnings and errors for unsupported dialects. > * testsuite/18_support/headers/cstdbool/macros.cc: Likewise. > * testsuite/26_numerics/headers/ctgmath/complex.cc: Likewise. > * testsuite/27_io/objects/char/1.cc: Do not include <ciso646>. > * testsuite/27_io/objects/wchar_t/1.cc: Likewise. > * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc: Removed. > * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Removed. > * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Removed. > * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Removed. > * testsuite/18_support/headers/ciso646/macros.cc: New test. > * testsuite/18_support/headers/ciso646/macros.h.cc: New test. > * testsuite/18_support/headers/cstdbool/macros.h.cc: New test. > * testsuite/26_numerics/headers/ccomplex/complex.cc: New test. > * testsuite/26_numerics/headers/ccomplex/complex.h.cc: New test. > * testsuite/26_numerics/headers/ctgmath/complex.h.cc: New test. > > gcc/testsuite/ChangeLog: > > * g++.old-deja/g++.other/headers1.C: Do not include ciso646 for > C++17 and later. > --- > .../g++.old-deja/g++.other/headers1.C | 2 + > libstdc++-v3/doc/html/manual/api.html | 8 +++ > libstdc++-v3/doc/xml/manual/evolution.xml | 10 ++++ > .../include/c_compatibility/complex.h | 10 ++-- > libstdc++-v3/include/c_compatibility/tgmath.h | 11 ++-- > libstdc++-v3/include/c_global/ccomplex | 9 ++++ > libstdc++-v3/include/c_global/ciso646 | 9 ++++ > libstdc++-v3/include/c_global/cstdalign | 8 +++ > libstdc++-v3/include/c_global/cstdbool | 8 +++ > libstdc++-v3/include/c_global/ctgmath | 14 +++-- > libstdc++-v3/include/c_std/ciso646 | 10 ++++ > libstdc++-v3/include/precompiled/stdc++.h | 13 +++-- > .../18_support/headers/ciso646/macros.cc | 51 +++++++++++++++++++ > .../18_support/headers/ciso646/macros.h.cc | 49 ++++++++++++++++++ > .../18_support/headers/cstdalign/macros.cc | 10 +++- > .../18_support/headers/cstdalign/macros.h.cc | 25 +++++++++ > .../headers/cstdalign/std_c++0x_neg.cc | 24 --------- > .../18_support/headers/cstdbool/macros.cc | 9 +++- > .../18_support/headers/cstdbool/macros.h.cc | 21 ++++++++ > .../headers/cstdbool/std_c++0x_neg.cc | 26 ---------- > .../26_numerics/headers/ccomplex/complex.cc | 10 ++++ > .../26_numerics/headers/ccomplex/complex.h.cc | 10 ++++ > .../headers/ccomplex/std_c++0x_neg.cc | 26 ---------- > .../26_numerics/headers/ctgmath/complex.cc | 9 +++- > .../26_numerics/headers/ctgmath/complex.h.cc | 10 ++++ > .../headers/ctgmath/std_c++0x_neg.cc | 26 ---------- > .../testsuite/27_io/objects/char/1.cc | 1 - > .../testsuite/27_io/objects/wchar_t/1.cc | 1 - > 28 files changed, 294 insertions(+), 126 deletions(-) > create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc > delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc > delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc > delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc > delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc > > diff --git a/gcc/testsuite/g++.old-deja/g++.other/headers1.C b/gcc/testsuite/g++.old-deja/g++.other/headers1.C > index 5d37e94082f..90a1a7dc8f9 100644 > --- a/gcc/testsuite/g++.old-deja/g++.other/headers1.C > +++ b/gcc/testsuite/g++.old-deja/g++.other/headers1.C > @@ -12,7 +12,9 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> > +#if __cplusplus < 201703L > #include <ciso646> > +#endif > #include <climits> > #include <clocale> > #include <cmath> > diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html > index 799f6eae2a2..2ccfc07b83e 100644 > --- a/libstdc++-v3/doc/html/manual/api.html > +++ b/libstdc++-v3/doc/html/manual/api.html > @@ -498,4 +498,12 @@ to be used with <code class="code">std::basic_istream</code>. > longer allowed in C++20 mode. > </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_151"></a><code class="constant">15</code></h3></div></div></div><p> > Enabled debug assertions by default for unoptimized builds. > +</p><p> > +Added warnings when including the headers that were deprecated in C++17 > +and removed in C++20: > +<code class="filename"><ccomplex></code>, > +<code class="filename"><ciso646></code>, > +<code class="filename"><cstdalign></code>, > +<code class="filename"><cstdbool></code>, and > +<code class="filename"><ctgmath></code>. > </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html> > \ No newline at end of file > diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml > index 75cf948a4a2..6b134de0e71 100644 > --- a/libstdc++-v3/doc/xml/manual/evolution.xml > +++ b/libstdc++-v3/doc/xml/manual/evolution.xml > @@ -1135,6 +1135,16 @@ to be used with <code>std::basic_istream</code>. > Enabled debug assertions by default for unoptimized builds. > </para> > > +<para> > +Added warnings when including the headers that were deprecated in C++17 > +and removed in C++20: > +<filename class="headerfile"><ccomplex></filename>, > +<filename class="headerfile"><ciso646></filename>, > +<filename class="headerfile"><cstdalign></filename>, > +<filename class="headerfile"><cstdbool></filename>, and > +<filename class="headerfile"><ctgmath></filename>. > +</para> > + > </section> > > </section> > diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h > index 605d1f30e06..461ff2117b1 100644 > --- a/libstdc++-v3/include/c_compatibility/complex.h > +++ b/libstdc++-v3/include/c_compatibility/complex.h > @@ -26,10 +26,15 @@ > * This is a Standard C++ Library header. > */ > > +#ifndef _GLIBCXX_COMPLEX_H > +#define _GLIBCXX_COMPLEX_H 1 > + > #include <bits/c++config.h> > > #if __cplusplus >= 201103L > -# include <ccomplex> > +extern "C++" { > +#include <complex> > +} > #endif > > #if __cplusplus >= 201103L && defined(__STRICT_ANSI__) > @@ -42,7 +47,4 @@ > # endif > #endif > > -#ifndef _GLIBCXX_COMPLEX_H > -#define _GLIBCXX_COMPLEX_H 1 > - > #endif > diff --git a/libstdc++-v3/include/c_compatibility/tgmath.h b/libstdc++-v3/include/c_compatibility/tgmath.h > index aadddd91b60..6bf6727a15c 100644 > --- a/libstdc++-v3/include/c_compatibility/tgmath.h > +++ b/libstdc++-v3/include/c_compatibility/tgmath.h > @@ -32,11 +32,12 @@ > #include <bits/c++config.h> > > #if __cplusplus >= 201103L > -# include <ctgmath> > -#else > -# if _GLIBCXX_HAVE_TGMATH_H > -# include_next <tgmath.h> > -# endif > +# include <cmath> > +extern "C++" { > +# include <complex> > +} > +#elif _GLIBCXX_HAVE_TGMATH_H > +# include_next <tgmath.h> > #endif > > #endif > diff --git a/libstdc++-v3/include/c_global/ccomplex b/libstdc++-v3/include/c_global/ccomplex > index ee1166aaecb..b0e30fa67eb 100644 > --- a/libstdc++-v3/include/c_global/ccomplex > +++ b/libstdc++-v3/include/c_global/ccomplex > @@ -41,4 +41,13 @@ extern "C++" { > #include <complex> > } > > +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<ccomplex> is not a standard header in C++20, use <complex.h>" > +#elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<ccomplex> is deprecated in C++17, use <complex.h>" > +# pragma GCC diagnostic pop > +#endif > + > #endif > diff --git a/libstdc++-v3/include/c_global/ciso646 b/libstdc++-v3/include/c_global/ciso646 > index 6e26f9be12e..ed1fcf6f14e 100644 > --- a/libstdc++-v3/include/c_global/ciso646 > +++ b/libstdc++-v3/include/c_global/ciso646 > @@ -38,4 +38,13 @@ > > #include <bits/c++config.h> > > +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" > +#elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" > +# pragma GCC diagnostic pop > +#endif > + > #endif > diff --git a/libstdc++-v3/include/c_global/cstdalign b/libstdc++-v3/include/c_global/cstdalign > index 4f610588425..f7bbbad82a0 100644 > --- a/libstdc++-v3/include/c_global/cstdalign > +++ b/libstdc++-v3/include/c_global/cstdalign > @@ -40,6 +40,14 @@ > # if _GLIBCXX_HAVE_STDALIGN_H > # include <stdalign.h> > # endif > +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<cstdalign> is not a standard header in C++20, use <stdalign.h>" > +# elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<cstdalign> is deprecated in C++17, use <stdalign.h>" > +# pragma GCC diagnostic pop > +# endif > #endif > > #endif > diff --git a/libstdc++-v3/include/c_global/cstdbool b/libstdc++-v3/include/c_global/cstdbool > index 8d2e75df33f..27be50ff510 100644 > --- a/libstdc++-v3/include/c_global/cstdbool > +++ b/libstdc++-v3/include/c_global/cstdbool > @@ -40,6 +40,14 @@ > # if _GLIBCXX_HAVE_STDBOOL_H > # include <stdbool.h> > # endif > +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<cstdbool> is not a standard header in C++20, use <stdbool.h>" > +# elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<cstdbool> is deprecated in C++17, use <stdbool.h>" > +# pragma GCC diagnostic pop > +# endif > #endif > > #endif > diff --git a/libstdc++-v3/include/c_global/ctgmath b/libstdc++-v3/include/c_global/ctgmath > index 79c1a029f41..5824a20c7c0 100644 > --- a/libstdc++-v3/include/c_global/ctgmath > +++ b/libstdc++-v3/include/c_global/ctgmath > @@ -26,13 +26,13 @@ > * This is a Standard C++ Library header. > */ > > +#ifndef _GLIBCXX_CTGMATH > +#define _GLIBCXX_CTGMATH 1 > + > #ifdef _GLIBCXX_SYSHDR > #pragma GCC system_header > #endif > > -#ifndef _GLIBCXX_CTGMATH > -#define _GLIBCXX_CTGMATH 1 > - > #if __cplusplus < 201103L > # include <bits/c++0x_warning.h> > #else > @@ -40,6 +40,14 @@ > extern "C++" { > # include <complex> > } > +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<ctgmath> is not a standard header in C++20, use <tgmath.h>" > +# elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<ctgmath> is deprecated in C++17, use <tgmath.h>" > +# pragma GCC diagnostic pop > +# endif > #endif > > #endif > diff --git a/libstdc++-v3/include/c_std/ciso646 b/libstdc++-v3/include/c_std/ciso646 > index 7971f0d0c31..ac9801aef2b 100644 > --- a/libstdc++-v3/include/c_std/ciso646 > +++ b/libstdc++-v3/include/c_std/ciso646 > @@ -37,4 +37,14 @@ > #endif > > #include <bits/c++config.h> > + > +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED > +# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" > +#elif __cplusplus >= 201703L && defined __DEPRECATED > +# pragma GCC diagnostic push > +# pragma GCC diagnostic ignored "-Wc++23-extensions" > +# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" > +# pragma GCC diagnostic pop > +#endif > + > #endif > diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h > index 3eef20d1645..89917106bac 100644 > --- a/libstdc++-v3/include/precompiled/stdc++.h > +++ b/libstdc++-v3/include/precompiled/stdc++.h > @@ -34,7 +34,6 @@ > #endif > #include <cctype> > #include <cfloat> > -#include <ciso646> > #include <climits> > #include <csetjmp> > #include <cstdarg> > @@ -43,6 +42,9 @@ > > #if __cplusplus >= 201103L > #include <cstdint> > +#if __cplusplus < 201703L > +#include <ciso646> > +#endif > #endif > > // C++ > @@ -108,7 +110,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> > -#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath> > @@ -124,14 +125,16 @@ > #include <cwctype> > > #if __cplusplus >= 201103L > -#include <ccomplex> > #include <cfenv> > #include <cinttypes> > +#include <cstdint> > +#include <cuchar> > +#if __cplusplus < 201703L > +#include <ccomplex> > #include <cstdalign> > #include <cstdbool> > -#include <cstdint> > #include <ctgmath> > -#include <cuchar> > +#endif > #endif > > // C++ > diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc > new file mode 100644 > index 00000000000..ab3a041de06 > --- /dev/null > +++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc > @@ -0,0 +1,51 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } > +// { dg-do preprocess } > + > +#include <ciso646> > + > +// { dg-warning "deprecated" "" { target c++17_only } 0 } > +// { dg-error "not a standard header" "" { target c++20 } 0 } > + > +#ifdef and > +# error "The header <ciso646> defines a macro named and" > +#endif > + > +#ifdef and_eq > +# error "The header <ciso646> defines a macro named and_eq" > +#endif > + > +#ifdef bitand > +# error "The header <ciso646> defines a macro named bitand" > +#endif > + > +#ifdef bitor > +# error "The header <ciso646> defines a macro named bitor" > +#endif > + > +#ifdef compl > +# error "The header <ciso646> defines a macro named compl" > +#endif > + > +#ifdef not > +# error "The header <ciso646> defines a macro named not" > +#endif > + > +#ifdef not_eq > +# error "The header <ciso646> defines a macro named not_eq" > +#endif > + > +#ifdef or > +# error "The header <ciso646> defines a macro named or" > +#endif > + > +#ifdef or_eq > +# error "The header <ciso646> defines a macro named or_eq" > +#endif > + > +#ifdef xor > +# error "The header <ciso646> defines a macro named xor" > +#endif > + > +#ifdef xor_eq > +# error "The header <ciso646> defines a macro named xor_eq" > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc > new file mode 100644 > index 00000000000..a70c18de918 > --- /dev/null > +++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc > @@ -0,0 +1,49 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } > +// { dg-do preprocess } > +// { dg-bogus "deprecated" "C++17 deprecated <ciso646> but not <iso646.h>" } > + > +#include <iso646.h> > + > +#ifdef and > +# error "The header <iso646.h> defines a macro named and" > +#endif > + > +#ifdef and_eq > +# error "The header <iso646.h> defines a macro named and_eq" > +#endif > + > +#ifdef bitand > +# error "The header <iso646.h> defines a macro named bitand" > +#endif > + > +#ifdef bitor > +# error "The header <iso646.h> defines a macro named bitor" > +#endif > + > +#ifdef compl > +# error "The header <iso646.h> defines a macro named compl" > +#endif > + > +#ifdef not > +# error "The header <iso646.h> defines a macro named not" > +#endif > + > +#ifdef not_eq > +# error "The header <iso646.h> defines a macro named not_eq" > +#endif > + > +#ifdef or > +# error "The header <iso646.h> defines a macro named or" > +#endif > + > +#ifdef or_eq > +# error "The header <iso646.h> defines a macro named or_eq" > +#endif > + > +#ifdef xor > +# error "The header <iso646.h> defines a macro named xor" > +#endif > + > +#ifdef xor_eq > +# error "The header <iso646.h> defines a macro named xor_eq" > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc > index c50c921cd59..793cd26dfa8 100644 > --- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc > +++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc > @@ -1,8 +1,13 @@ > -// { dg-options "-D_GLIBCXX_USE_DEPRECATED=1 -Wno-deprecated" } > -// { dg-do preprocess { target c++11 } } > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do preprocess } > > #include <cstdalign> > > +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } > +// { dg-warning "deprecated" "" { target c++17_only } 0 } > +// { dg-error "not a standard header" "" { target c++20 } 0 } > + > +#if __cplusplus >= 201103L > #ifndef __alignas_is_defined > # error "The header <cstdalign> fails to define a macro named __alignas_is_defined" > #elif __alignas_is_defined != 1 > @@ -22,3 +27,4 @@ > #ifdef alignof > # error "The header <cstdalign> defines a macro named alignof" > #endif > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc > new file mode 100644 > index 00000000000..78f41ae02e8 > --- /dev/null > +++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc > @@ -0,0 +1,25 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do preprocess { target c++11 } } > +// { dg-bogus "deprecated" "C++17 deprecated <cstdalign> but not <stdalign.h>" } > + > +#include <stdalign.h> > + > +#ifndef __alignas_is_defined > +# error "The header <stdalign.h> fails to define a macro named __alignas_is_defined" > +#elif __alignas_is_defined != 1 > +# error "__alignas_is_defined is not defined to 1 in <stdalign.h>" > +#endif > + > +#ifndef __alignof_is_defined > +# error "The header <stdalign.h> fails to define a macro named __alignof_is_defined" > +#elif __alignof_is_defined != 1 > +# error "__alignof_is_defined is not defined to 1 in <stdalign.h>" > +#endif > + > +#ifdef alignas > +# error "The header <stdalign.h> defines a macro named alignas" > +#endif > + > +#ifdef alignof > +# error "The header <stdalign.h> defines a macro named alignof" > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc > deleted file mode 100644 > index 14694f034e6..00000000000 > --- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc > +++ /dev/null > @@ -1,24 +0,0 @@ > -// { dg-options "-std=gnu++98" } > -// { dg-do compile { target c++98_only } } > - > -// Copyright (C) 2011-2024 Free Software Foundation, Inc. > -// > -// This file is part of the GNU ISO C++ Library. This library is free > -// software; you can redistribute it and/or modify it under the > -// terms of the GNU General Public License as published by the > -// Free Software Foundation; either version 3, or (at your option) > -// any later version. > - > -// This library is distributed in the hope that it will be useful, > -// but WITHOUT ANY WARRANTY; without even the implied warranty of > -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -// GNU General Public License for more details. > - > -// You should have received a copy of the GNU General Public License along > -// with this library; see the file COPYING3. If not see > -// <http://www.gnu.org/licenses/>. > - > -#include <cstdalign> > - > -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } > - > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc > index e0afc26e458..658a02a4565 100644 > --- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc > +++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc > @@ -1,4 +1,5 @@ > -// { dg-do compile { target c++11 } } > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do preprocess } > > // Copyright (C) 2012-2024 Free Software Foundation, Inc. > // > @@ -19,6 +20,11 @@ > > #include <cstdbool> > > +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } > +// { dg-warning "deprecated" "" { target c++17_only } 0 } > +// { dg-error "not a standard header" "" { target c++20 } 0 } > + > +#if __cplusplus >= 201103L > #ifndef __bool_true_false_are_defined > # error "The header <cstdbool> fails to define a macro named __bool_true_false_are_defined" > #endif > @@ -34,3 +40,4 @@ > #ifdef false > # error "The header <cstdbool> defines a macro named false" > #endif > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc > new file mode 100644 > index 00000000000..a3c0f9a0aec > --- /dev/null > +++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc > @@ -0,0 +1,21 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do preprocess { target c++11 } } > +// { dg-bogus "deprecated" "C++17 deprecated <cstdbool> but not <stdbool.h>" } > + > +#include <stdbool.h> > + > +#ifndef __bool_true_false_are_defined > +# error "The header <stdbool.h> fails to define a macro named __bool_true_false_are_defined" > +#endif > + > +#ifdef bool > +# error "The header <stdbool.h> defines a macro named bool" > +#endif > + > +#ifdef true > +# error "The header <stdbool.h> defines a macro named true" > +#endif > + > +#ifdef false > +# error "The header <stdbool.h> defines a macro named false" > +#endif > diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc > deleted file mode 100644 > index 5b8c5688877..00000000000 > --- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc > +++ /dev/null > @@ -1,26 +0,0 @@ > -// { dg-options "-std=gnu++98" } > -// { dg-do compile { target c++98_only } } > - > -// Copyright (C) 2007-2024 Free Software Foundation, Inc. > -// > -// This file is part of the GNU ISO C++ Library. This library is free > -// software; you can redistribute it and/or modify it under the > -// terms of the GNU General Public License as published by the > -// Free Software Foundation; either version 3, or (at your option) > -// any later version. > - > -// This library is distributed in the hope that it will be useful, > -// but WITHOUT ANY WARRANTY; without even the implied warranty of > -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -// GNU General Public License for more details. > - > -// You should have received a copy of the GNU General Public License along > -// with this library; see the file COPYING3. If not see > -// <http://www.gnu.org/licenses/>. > - > -#include <cstdbool> > - > -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } > - > - > - > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc > new file mode 100644 > index 00000000000..d6c33781ae5 > --- /dev/null > +++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc > @@ -0,0 +1,10 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do compile } > + > +#include <ccomplex> > + > +std::complex<double> d; > + > +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } > +// { dg-warning "deprecated" "" { target c++17_only } 0 } > +// { dg-error "not a standard header" "" { target c++20 } 0 } > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc > new file mode 100644 > index 00000000000..318b78ee89e > --- /dev/null > +++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc > @@ -0,0 +1,10 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do compile } > +// { dg-bogus "deprecated" "C++17 deprecated <ccomplex> but not <complex.h>" } > + > +#include <complex.h> > + > +#if __cplusplus < 201103L > +# undef complex > +#endif > +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc > deleted file mode 100644 > index 16c623b25b0..00000000000 > --- a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc > +++ /dev/null > @@ -1,26 +0,0 @@ > -// { dg-options "-std=gnu++98" } > -// { dg-do compile { target c++98_only } } > - > -// Copyright (C) 2007-2024 Free Software Foundation, Inc. > -// > -// This file is part of the GNU ISO C++ Library. This library is free > -// software; you can redistribute it and/or modify it under the > -// terms of the GNU General Public License as published by the > -// Free Software Foundation; either version 3, or (at your option) > -// any later version. > - > -// This library is distributed in the hope that it will be useful, > -// but WITHOUT ANY WARRANTY; without even the implied warranty of > -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -// GNU General Public License for more details. > - > -// You should have received a copy of the GNU General Public License along > -// with this library; see the file COPYING3. If not see > -// <http://www.gnu.org/licenses/>. > - > -#include <ccomplex> > - > -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } > - > - > - > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc > index a2c4a55c89b..ef2bbd0e20a 100644 > --- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc > +++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc > @@ -15,8 +15,13 @@ > // with this library; see the file COPYING3. If not see > // <http://www.gnu.org/licenses/>. > > -// { dg-do compile { target c++11 } } > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do compile } > > #include <ctgmath> > > -std::complex<double> d; > +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } > + > +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } > +// { dg-warning "deprecated" "" { target c++17_only } 0 } > +// { dg-error "not a standard header" "" { target c++20 } 0 } > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc > new file mode 100644 > index 00000000000..fd6847bff4f > --- /dev/null > +++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc > @@ -0,0 +1,10 @@ > +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } > +// { dg-do compile } > +// { dg-bogus "deprecated" "C++17 deprecated <ctgmath> but not <tgmath.h>" } > + > +#include <tgmath.h> > + > +#if __cplusplus < 201103L > +# undef complex > +#endif > +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } > diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc > deleted file mode 100644 > index d693c8b23ed..00000000000 > --- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc > +++ /dev/null > @@ -1,26 +0,0 @@ > -// { dg-options "-std=gnu++98" } > -// { dg-do compile { target c++98_only } } > - > -// Copyright (C) 2007-2024 Free Software Foundation, Inc. > -// > -// This file is part of the GNU ISO C++ Library. This library is free > -// software; you can redistribute it and/or modify it under the > -// terms of the GNU General Public License as published by the > -// Free Software Foundation; either version 3, or (at your option) > -// any later version. > - > -// This library is distributed in the hope that it will be useful, > -// but WITHOUT ANY WARRANTY; without even the implied warranty of > -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -// GNU General Public License for more details. > - > -// You should have received a copy of the GNU General Public License along > -// with this library; see the file COPYING3. If not see > -// <http://www.gnu.org/licenses/>. > - > -#include <ctgmath> > - > -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } > - > - > - > diff --git a/libstdc++-v3/testsuite/27_io/objects/char/1.cc b/libstdc++-v3/testsuite/27_io/objects/char/1.cc > index 9fc9244baf4..d50b3884702 100644 > --- a/libstdc++-v3/testsuite/27_io/objects/char/1.cc > +++ b/libstdc++-v3/testsuite/27_io/objects/char/1.cc > @@ -53,7 +53,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> > -#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath> > diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc > index 23b2168805d..c2f3643b4e5 100644 > --- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc > +++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc > @@ -53,7 +53,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> > -#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath>
On 31/10/24 20:09 +0000, Jonathan Wakely wrote: >Tested x86_64-linux. Is the g++ test change OK? > >Also available for review at: >https://forge.sourceware.org/gcc/gcc-TEST/pulls/4 > >-- >8 -- > >These headers make no sense for C++ programs, because they either define >different content to the corresponding <xxx.h> C header, or define >nothing at all in namespace std. They were all deprecated in C++17, so >add deprecation warnings to them, which can be disabled with >-Wno-deprecated. For C++20 and later these headers are no longer in the >standard at all, so compiling with _GLIBCXX_USE_DEPRECATED defined to 0 >will give an error when they are included. > >Because #warning is non-standard before C++23 we need to use pragmas to >ignore -Wc++23-extensions for the -Wsystem-headers -pedantic case. > >One g++ test needs adjustment because it includes <ciso646>, but that >can be made conditional on the __cplusplus value without any reduction >in test coverage. > >For the library tests, consolidate the std_c++0x_neg.cc XFAIL tests into >the macros.cc test, using dg-error with a { target c++98_only } >selector. This avoids having two separate test files, one for C++98 and >one for everything later. Also add tests for the <xxx.h> headers to >ensure that they behave as expected and don't give deprecated warnings. > >libstdc++-v3/ChangeLog: > > * doc/xml/manual/evolution.xml: Document deprecations. > * doc/html/*: Regenerate. > * include/c_compatibility/complex.h (_GLIBCXX_COMPLEX_H): Move > include guard to start of file. Include <complex> directly > instead of <ccomplex>. > * include/c_compatibility/tgmath.h: Include <cmath> and > <complex> directly, instead of <ctgmath>. > * include/c_global/ccomplex: Add deprecated #warning for C++17 > and #error for C++20 if _GLIBCXX_USE_DEPRECATED == 0. > * include/c_global/ciso646: Likewise. > * include/c_global/cstdalign: Likewise. > * include/c_global/cstdbool: Likewise. > * include/c_global/ctgmath: Likewise. > * include/c_std/ciso646: Likewise. > * include/precompiled/stdc++.h: Do not include ccomplex, > ciso646, cstdalign, cstdbool, or ctgmath in C++17 and later. > * testsuite/18_support/headers/cstdalign/macros.cc: Check for > warnings and errors for unsupported dialects. > * testsuite/18_support/headers/cstdbool/macros.cc: Likewise. > * testsuite/26_numerics/headers/ctgmath/complex.cc: Likewise. > * testsuite/27_io/objects/char/1.cc: Do not include <ciso646>. > * testsuite/27_io/objects/wchar_t/1.cc: Likewise. > * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc: Removed. > * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Removed. > * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Removed. > * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Removed. > * testsuite/18_support/headers/ciso646/macros.cc: New test. > * testsuite/18_support/headers/ciso646/macros.h.cc: New test. > * testsuite/18_support/headers/cstdbool/macros.h.cc: New test. > * testsuite/26_numerics/headers/ccomplex/complex.cc: New test. > * testsuite/26_numerics/headers/ccomplex/complex.h.cc: New test. > * testsuite/26_numerics/headers/ctgmath/complex.h.cc: New test. > >gcc/testsuite/ChangeLog: > > * g++.old-deja/g++.other/headers1.C: Do not include ciso646 for > C++17 and later. >--- > .../g++.old-deja/g++.other/headers1.C | 2 + > libstdc++-v3/doc/html/manual/api.html | 8 +++ > libstdc++-v3/doc/xml/manual/evolution.xml | 10 ++++ > .../include/c_compatibility/complex.h | 10 ++-- > libstdc++-v3/include/c_compatibility/tgmath.h | 11 ++-- > libstdc++-v3/include/c_global/ccomplex | 9 ++++ > libstdc++-v3/include/c_global/ciso646 | 9 ++++ > libstdc++-v3/include/c_global/cstdalign | 8 +++ > libstdc++-v3/include/c_global/cstdbool | 8 +++ > libstdc++-v3/include/c_global/ctgmath | 14 +++-- > libstdc++-v3/include/c_std/ciso646 | 10 ++++ > libstdc++-v3/include/precompiled/stdc++.h | 13 +++-- > .../18_support/headers/ciso646/macros.cc | 51 +++++++++++++++++++ > .../18_support/headers/ciso646/macros.h.cc | 49 ++++++++++++++++++ > .../18_support/headers/cstdalign/macros.cc | 10 +++- > .../18_support/headers/cstdalign/macros.h.cc | 25 +++++++++ > .../headers/cstdalign/std_c++0x_neg.cc | 24 --------- > .../18_support/headers/cstdbool/macros.cc | 9 +++- > .../18_support/headers/cstdbool/macros.h.cc | 21 ++++++++ > .../headers/cstdbool/std_c++0x_neg.cc | 26 ---------- > .../26_numerics/headers/ccomplex/complex.cc | 10 ++++ > .../26_numerics/headers/ccomplex/complex.h.cc | 10 ++++ > .../headers/ccomplex/std_c++0x_neg.cc | 26 ---------- > .../26_numerics/headers/ctgmath/complex.cc | 9 +++- > .../26_numerics/headers/ctgmath/complex.h.cc | 10 ++++ > .../headers/ctgmath/std_c++0x_neg.cc | 26 ---------- > .../testsuite/27_io/objects/char/1.cc | 1 - > .../testsuite/27_io/objects/wchar_t/1.cc | 1 - > 28 files changed, 294 insertions(+), 126 deletions(-) > create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc > delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc > delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc > delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc > create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc > delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc > >diff --git a/gcc/testsuite/g++.old-deja/g++.other/headers1.C b/gcc/testsuite/g++.old-deja/g++.other/headers1.C >index 5d37e94082f..90a1a7dc8f9 100644 >--- a/gcc/testsuite/g++.old-deja/g++.other/headers1.C >+++ b/gcc/testsuite/g++.old-deja/g++.other/headers1.C >@@ -12,7 +12,9 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> >+#if __cplusplus < 201703L > #include <ciso646> >+#endif > #include <climits> > #include <clocale> > #include <cmath> >diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html >index 799f6eae2a2..2ccfc07b83e 100644 >--- a/libstdc++-v3/doc/html/manual/api.html >+++ b/libstdc++-v3/doc/html/manual/api.html >@@ -498,4 +498,12 @@ to be used with <code class="code">std::basic_istream</code>. > longer allowed in C++20 mode. > </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_151"></a><code class="constant">15</code></h3></div></div></div><p> > Enabled debug assertions by default for unoptimized builds. >+</p><p> >+Added warnings when including the headers that were deprecated in C++17 >+and removed in C++20: >+<code class="filename"><ccomplex></code>, >+<code class="filename"><ciso646></code>, >+<code class="filename"><cstdalign></code>, >+<code class="filename"><cstdbool></code>, and >+<code class="filename"><ctgmath></code>. > </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a>??</td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right">??<a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines??</td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">??Backwards Compatibility</td></tr></table></div></body></html> >\ No newline at end of file >diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml >index 75cf948a4a2..6b134de0e71 100644 >--- a/libstdc++-v3/doc/xml/manual/evolution.xml >+++ b/libstdc++-v3/doc/xml/manual/evolution.xml >@@ -1135,6 +1135,16 @@ to be used with <code>std::basic_istream</code>. > Enabled debug assertions by default for unoptimized builds. > </para> > >+<para> >+Added warnings when including the headers that were deprecated in C++17 >+and removed in C++20: >+<filename class="headerfile"><ccomplex></filename>, >+<filename class="headerfile"><ciso646></filename>, >+<filename class="headerfile"><cstdalign></filename>, >+<filename class="headerfile"><cstdbool></filename>, and >+<filename class="headerfile"><ctgmath></filename>. >+</para> >+ > </section> > > </section> >diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h >index 605d1f30e06..461ff2117b1 100644 >--- a/libstdc++-v3/include/c_compatibility/complex.h >+++ b/libstdc++-v3/include/c_compatibility/complex.h >@@ -26,10 +26,15 @@ > * This is a Standard C++ Library header. > */ > >+#ifndef _GLIBCXX_COMPLEX_H >+#define _GLIBCXX_COMPLEX_H 1 >+ > #include <bits/c++config.h> > > #if __cplusplus >= 201103L >-# include <ccomplex> >+extern "C++" { >+#include <complex> >+} > #endif > > #if __cplusplus >= 201103L && defined(__STRICT_ANSI__) >@@ -42,7 +47,4 @@ > # endif > #endif > >-#ifndef _GLIBCXX_COMPLEX_H >-#define _GLIBCXX_COMPLEX_H 1 >- > #endif >diff --git a/libstdc++-v3/include/c_compatibility/tgmath.h b/libstdc++-v3/include/c_compatibility/tgmath.h >index aadddd91b60..6bf6727a15c 100644 >--- a/libstdc++-v3/include/c_compatibility/tgmath.h >+++ b/libstdc++-v3/include/c_compatibility/tgmath.h >@@ -32,11 +32,12 @@ > #include <bits/c++config.h> > > #if __cplusplus >= 201103L >-# include <ctgmath> >-#else >-# if _GLIBCXX_HAVE_TGMATH_H >-# include_next <tgmath.h> >-# endif >+# include <cmath> >+extern "C++" { >+# include <complex> >+} >+#elif _GLIBCXX_HAVE_TGMATH_H >+# include_next <tgmath.h> > #endif > > #endif >diff --git a/libstdc++-v3/include/c_global/ccomplex b/libstdc++-v3/include/c_global/ccomplex >index ee1166aaecb..b0e30fa67eb 100644 >--- a/libstdc++-v3/include/c_global/ccomplex >+++ b/libstdc++-v3/include/c_global/ccomplex >@@ -41,4 +41,13 @@ extern "C++" { > #include <complex> > } > >+#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<ccomplex> is not a standard header in C++20, use <complex.h>" >+#elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<ccomplex> is deprecated in C++17, use <complex.h>" I'm not sure whether we should suggest <complex.h> or <complex> here. It's hard to know what users might have intended when including <ccomplex>. I suppose we should suggest <complex>, since that's what they got for <ccomplex> in C++11 and C++14. >+# pragma GCC diagnostic pop >+#endif >+ > #endif >diff --git a/libstdc++-v3/include/c_global/ciso646 b/libstdc++-v3/include/c_global/ciso646 >index 6e26f9be12e..ed1fcf6f14e 100644 >--- a/libstdc++-v3/include/c_global/ciso646 >+++ b/libstdc++-v3/include/c_global/ciso646 >@@ -38,4 +38,13 @@ > > #include <bits/c++config.h> > >+#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" >+#elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" There's no reason to include <ciso646> _except_ as a cheap header that can be used to detect which std::lib you're using, e.g. as Howard used to recommend: https://stackoverflow.com/a/13220861/981959 https://stackoverflow.com/a/18832356/981959 The modern way to do that is <version>, but maybe <iso646.h> makes more sense if somebody was including ciso46 for some other reason (what reason though?) >+# pragma GCC diagnostic pop >+#endif >+ > #endif >diff --git a/libstdc++-v3/include/c_global/cstdalign b/libstdc++-v3/include/c_global/cstdalign >index 4f610588425..f7bbbad82a0 100644 >--- a/libstdc++-v3/include/c_global/cstdalign >+++ b/libstdc++-v3/include/c_global/cstdalign >@@ -40,6 +40,14 @@ > # if _GLIBCXX_HAVE_STDALIGN_H > # include <stdalign.h> > # endif >+# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<cstdalign> is not a standard header in C++20, use <stdalign.h>" >+# elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<cstdalign> is deprecated in C++17, use <stdalign.h>" Should we suggest <stdalign.h>, or suggest simply removing <cstdalign>? There's no reason to include <cstdalign> in C++ code, and just as little reason to include <stdalign.h> >+# pragma GCC diagnostic pop >+# endif > #endif > > #endif >diff --git a/libstdc++-v3/include/c_global/cstdbool b/libstdc++-v3/include/c_global/cstdbool >index 8d2e75df33f..27be50ff510 100644 >--- a/libstdc++-v3/include/c_global/cstdbool >+++ b/libstdc++-v3/include/c_global/cstdbool >@@ -40,6 +40,14 @@ > # if _GLIBCXX_HAVE_STDBOOL_H > # include <stdbool.h> > # endif >+# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<cstdbool> is not a standard header in C++20, use <stdbool.h>" >+# elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<cstdbool> is deprecated in C++17, use <stdbool.h>" Ditto. <stdbool.h> or just remove <cstdbool>? >+# pragma GCC diagnostic pop >+# endif > #endif > > #endif >diff --git a/libstdc++-v3/include/c_global/ctgmath b/libstdc++-v3/include/c_global/ctgmath >index 79c1a029f41..5824a20c7c0 100644 >--- a/libstdc++-v3/include/c_global/ctgmath >+++ b/libstdc++-v3/include/c_global/ctgmath >@@ -26,13 +26,13 @@ > * This is a Standard C++ Library header. > */ > >+#ifndef _GLIBCXX_CTGMATH >+#define _GLIBCXX_CTGMATH 1 >+ > #ifdef _GLIBCXX_SYSHDR > #pragma GCC system_header > #endif > >-#ifndef _GLIBCXX_CTGMATH >-#define _GLIBCXX_CTGMATH 1 >- > #if __cplusplus < 201103L > # include <bits/c++0x_warning.h> > #else >@@ -40,6 +40,14 @@ > extern "C++" { > # include <complex> > } >+# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<ctgmath> is not a standard header in C++20, use <tgmath.h>" >+# elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<ctgmath> is deprecated in C++17, use <tgmath.h>" Include <complex>, or <cmath>, or <tgmath.h>? >+# pragma GCC diagnostic pop >+# endif > #endif > > #endif >diff --git a/libstdc++-v3/include/c_std/ciso646 b/libstdc++-v3/include/c_std/ciso646 >index 7971f0d0c31..ac9801aef2b 100644 >--- a/libstdc++-v3/include/c_std/ciso646 >+++ b/libstdc++-v3/include/c_std/ciso646 >@@ -37,4 +37,14 @@ > #endif > > #include <bits/c++config.h> >+ >+#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >+# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" >+#elif __cplusplus >= 201703L && defined __DEPRECATED >+# pragma GCC diagnostic push >+# pragma GCC diagnostic ignored "-Wc++23-extensions" >+# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" >+# pragma GCC diagnostic pop >+#endif >+ > #endif >diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h >index 3eef20d1645..89917106bac 100644 >--- a/libstdc++-v3/include/precompiled/stdc++.h >+++ b/libstdc++-v3/include/precompiled/stdc++.h >@@ -34,7 +34,6 @@ > #endif > #include <cctype> > #include <cfloat> >-#include <ciso646> > #include <climits> > #include <csetjmp> > #include <cstdarg> >@@ -43,6 +42,9 @@ > > #if __cplusplus >= 201103L > #include <cstdint> >+#if __cplusplus < 201703L >+#include <ciso646> >+#endif > #endif > > // C++ >@@ -108,7 +110,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> >-#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath> >@@ -124,14 +125,16 @@ > #include <cwctype> > > #if __cplusplus >= 201103L >-#include <ccomplex> > #include <cfenv> > #include <cinttypes> >+#include <cstdint> >+#include <cuchar> >+#if __cplusplus < 201703L >+#include <ccomplex> > #include <cstdalign> > #include <cstdbool> >-#include <cstdint> > #include <ctgmath> >-#include <cuchar> >+#endif > #endif > > // C++ >diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc >new file mode 100644 >index 00000000000..ab3a041de06 >--- /dev/null >+++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc >@@ -0,0 +1,51 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } >+// { dg-do preprocess } >+ >+#include <ciso646> >+ >+// { dg-warning "deprecated" "" { target c++17_only } 0 } >+// { dg-error "not a standard header" "" { target c++20 } 0 } >+ >+#ifdef and >+# error "The header <ciso646> defines a macro named and" >+#endif >+ >+#ifdef and_eq >+# error "The header <ciso646> defines a macro named and_eq" >+#endif >+ >+#ifdef bitand >+# error "The header <ciso646> defines a macro named bitand" >+#endif >+ >+#ifdef bitor >+# error "The header <ciso646> defines a macro named bitor" >+#endif >+ >+#ifdef compl >+# error "The header <ciso646> defines a macro named compl" >+#endif >+ >+#ifdef not >+# error "The header <ciso646> defines a macro named not" >+#endif >+ >+#ifdef not_eq >+# error "The header <ciso646> defines a macro named not_eq" >+#endif >+ >+#ifdef or >+# error "The header <ciso646> defines a macro named or" >+#endif >+ >+#ifdef or_eq >+# error "The header <ciso646> defines a macro named or_eq" >+#endif >+ >+#ifdef xor >+# error "The header <ciso646> defines a macro named xor" >+#endif >+ >+#ifdef xor_eq >+# error "The header <ciso646> defines a macro named xor_eq" >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc >new file mode 100644 >index 00000000000..a70c18de918 >--- /dev/null >+++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc >@@ -0,0 +1,49 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } >+// { dg-do preprocess } >+// { dg-bogus "deprecated" "C++17 deprecated <ciso646> but not <iso646.h>" } >+ >+#include <iso646.h> >+ >+#ifdef and >+# error "The header <iso646.h> defines a macro named and" >+#endif >+ >+#ifdef and_eq >+# error "The header <iso646.h> defines a macro named and_eq" >+#endif >+ >+#ifdef bitand >+# error "The header <iso646.h> defines a macro named bitand" >+#endif >+ >+#ifdef bitor >+# error "The header <iso646.h> defines a macro named bitor" >+#endif >+ >+#ifdef compl >+# error "The header <iso646.h> defines a macro named compl" >+#endif >+ >+#ifdef not >+# error "The header <iso646.h> defines a macro named not" >+#endif >+ >+#ifdef not_eq >+# error "The header <iso646.h> defines a macro named not_eq" >+#endif >+ >+#ifdef or >+# error "The header <iso646.h> defines a macro named or" >+#endif >+ >+#ifdef or_eq >+# error "The header <iso646.h> defines a macro named or_eq" >+#endif >+ >+#ifdef xor >+# error "The header <iso646.h> defines a macro named xor" >+#endif >+ >+#ifdef xor_eq >+# error "The header <iso646.h> defines a macro named xor_eq" >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc >index c50c921cd59..793cd26dfa8 100644 >--- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc >+++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc >@@ -1,8 +1,13 @@ >-// { dg-options "-D_GLIBCXX_USE_DEPRECATED=1 -Wno-deprecated" } >-// { dg-do preprocess { target c++11 } } >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do preprocess } > > #include <cstdalign> > >+// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } >+// { dg-warning "deprecated" "" { target c++17_only } 0 } >+// { dg-error "not a standard header" "" { target c++20 } 0 } >+ >+#if __cplusplus >= 201103L > #ifndef __alignas_is_defined > # error "The header <cstdalign> fails to define a macro named __alignas_is_defined" > #elif __alignas_is_defined != 1 >@@ -22,3 +27,4 @@ > #ifdef alignof > # error "The header <cstdalign> defines a macro named alignof" > #endif >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc >new file mode 100644 >index 00000000000..78f41ae02e8 >--- /dev/null >+++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc >@@ -0,0 +1,25 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do preprocess { target c++11 } } >+// { dg-bogus "deprecated" "C++17 deprecated <cstdalign> but not <stdalign.h>" } >+ >+#include <stdalign.h> >+ >+#ifndef __alignas_is_defined >+# error "The header <stdalign.h> fails to define a macro named __alignas_is_defined" >+#elif __alignas_is_defined != 1 >+# error "__alignas_is_defined is not defined to 1 in <stdalign.h>" >+#endif >+ >+#ifndef __alignof_is_defined >+# error "The header <stdalign.h> fails to define a macro named __alignof_is_defined" >+#elif __alignof_is_defined != 1 >+# error "__alignof_is_defined is not defined to 1 in <stdalign.h>" >+#endif >+ >+#ifdef alignas >+# error "The header <stdalign.h> defines a macro named alignas" >+#endif >+ >+#ifdef alignof >+# error "The header <stdalign.h> defines a macro named alignof" >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc >deleted file mode 100644 >index 14694f034e6..00000000000 >--- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc >+++ /dev/null >@@ -1,24 +0,0 @@ >-// { dg-options "-std=gnu++98" } >-// { dg-do compile { target c++98_only } } >- >-// Copyright (C) 2011-2024 Free Software Foundation, Inc. >-// >-// This file is part of the GNU ISO C++ Library. This library is free >-// software; you can redistribute it and/or modify it under the >-// terms of the GNU General Public License as published by the >-// Free Software Foundation; either version 3, or (at your option) >-// any later version. >- >-// This library is distributed in the hope that it will be useful, >-// but WITHOUT ANY WARRANTY; without even the implied warranty of >-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-// GNU General Public License for more details. >- >-// You should have received a copy of the GNU General Public License along >-// with this library; see the file COPYING3. If not see >-// <http://www.gnu.org/licenses/>. >- >-#include <cstdalign> >- >-// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } >- >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc >index e0afc26e458..658a02a4565 100644 >--- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc >+++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc >@@ -1,4 +1,5 @@ >-// { dg-do compile { target c++11 } } >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do preprocess } > > // Copyright (C) 2012-2024 Free Software Foundation, Inc. > // >@@ -19,6 +20,11 @@ > > #include <cstdbool> > >+// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } >+// { dg-warning "deprecated" "" { target c++17_only } 0 } >+// { dg-error "not a standard header" "" { target c++20 } 0 } >+ >+#if __cplusplus >= 201103L > #ifndef __bool_true_false_are_defined > # error "The header <cstdbool> fails to define a macro named __bool_true_false_are_defined" > #endif >@@ -34,3 +40,4 @@ > #ifdef false > # error "The header <cstdbool> defines a macro named false" > #endif >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc >new file mode 100644 >index 00000000000..a3c0f9a0aec >--- /dev/null >+++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc >@@ -0,0 +1,21 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do preprocess { target c++11 } } >+// { dg-bogus "deprecated" "C++17 deprecated <cstdbool> but not <stdbool.h>" } >+ >+#include <stdbool.h> >+ >+#ifndef __bool_true_false_are_defined >+# error "The header <stdbool.h> fails to define a macro named __bool_true_false_are_defined" >+#endif >+ >+#ifdef bool >+# error "The header <stdbool.h> defines a macro named bool" >+#endif >+ >+#ifdef true >+# error "The header <stdbool.h> defines a macro named true" >+#endif >+ >+#ifdef false >+# error "The header <stdbool.h> defines a macro named false" >+#endif >diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc >deleted file mode 100644 >index 5b8c5688877..00000000000 >--- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc >+++ /dev/null >@@ -1,26 +0,0 @@ >-// { dg-options "-std=gnu++98" } >-// { dg-do compile { target c++98_only } } >- >-// Copyright (C) 2007-2024 Free Software Foundation, Inc. >-// >-// This file is part of the GNU ISO C++ Library. This library is free >-// software; you can redistribute it and/or modify it under the >-// terms of the GNU General Public License as published by the >-// Free Software Foundation; either version 3, or (at your option) >-// any later version. >- >-// This library is distributed in the hope that it will be useful, >-// but WITHOUT ANY WARRANTY; without even the implied warranty of >-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-// GNU General Public License for more details. >- >-// You should have received a copy of the GNU General Public License along >-// with this library; see the file COPYING3. If not see >-// <http://www.gnu.org/licenses/>. >- >-#include <cstdbool> >- >-// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } >- >- >- >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc >new file mode 100644 >index 00000000000..d6c33781ae5 >--- /dev/null >+++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc >@@ -0,0 +1,10 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do compile } >+ >+#include <ccomplex> >+ >+std::complex<double> d; >+ >+// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } >+// { dg-warning "deprecated" "" { target c++17_only } 0 } >+// { dg-error "not a standard header" "" { target c++20 } 0 } >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc >new file mode 100644 >index 00000000000..318b78ee89e >--- /dev/null >+++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc >@@ -0,0 +1,10 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do compile } >+// { dg-bogus "deprecated" "C++17 deprecated <ccomplex> but not <complex.h>" } >+ >+#include <complex.h> >+ >+#if __cplusplus < 201103L >+# undef complex >+#endif >+std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc >deleted file mode 100644 >index 16c623b25b0..00000000000 >--- a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc >+++ /dev/null >@@ -1,26 +0,0 @@ >-// { dg-options "-std=gnu++98" } >-// { dg-do compile { target c++98_only } } >- >-// Copyright (C) 2007-2024 Free Software Foundation, Inc. >-// >-// This file is part of the GNU ISO C++ Library. This library is free >-// software; you can redistribute it and/or modify it under the >-// terms of the GNU General Public License as published by the >-// Free Software Foundation; either version 3, or (at your option) >-// any later version. >- >-// This library is distributed in the hope that it will be useful, >-// but WITHOUT ANY WARRANTY; without even the implied warranty of >-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-// GNU General Public License for more details. >- >-// You should have received a copy of the GNU General Public License along >-// with this library; see the file COPYING3. If not see >-// <http://www.gnu.org/licenses/>. >- >-#include <ccomplex> >- >-// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } >- >- >- >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc >index a2c4a55c89b..ef2bbd0e20a 100644 >--- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc >+++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc >@@ -15,8 +15,13 @@ > // with this library; see the file COPYING3. If not see > // <http://www.gnu.org/licenses/>. > >-// { dg-do compile { target c++11 } } >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do compile } > > #include <ctgmath> > >-std::complex<double> d; >+std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } >+ >+// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } >+// { dg-warning "deprecated" "" { target c++17_only } 0 } >+// { dg-error "not a standard header" "" { target c++20 } 0 } >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc >new file mode 100644 >index 00000000000..fd6847bff4f >--- /dev/null >+++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc >@@ -0,0 +1,10 @@ >+// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } >+// { dg-do compile } >+// { dg-bogus "deprecated" "C++17 deprecated <ctgmath> but not <tgmath.h>" } >+ >+#include <tgmath.h> >+ >+#if __cplusplus < 201103L >+# undef complex >+#endif >+std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } >diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc >deleted file mode 100644 >index d693c8b23ed..00000000000 >--- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc >+++ /dev/null >@@ -1,26 +0,0 @@ >-// { dg-options "-std=gnu++98" } >-// { dg-do compile { target c++98_only } } >- >-// Copyright (C) 2007-2024 Free Software Foundation, Inc. >-// >-// This file is part of the GNU ISO C++ Library. This library is free >-// software; you can redistribute it and/or modify it under the >-// terms of the GNU General Public License as published by the >-// Free Software Foundation; either version 3, or (at your option) >-// any later version. >- >-// This library is distributed in the hope that it will be useful, >-// but WITHOUT ANY WARRANTY; without even the implied warranty of >-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >-// GNU General Public License for more details. >- >-// You should have received a copy of the GNU General Public License along >-// with this library; see the file COPYING3. If not see >-// <http://www.gnu.org/licenses/>. >- >-#include <ctgmath> >- >-// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } >- >- >- >diff --git a/libstdc++-v3/testsuite/27_io/objects/char/1.cc b/libstdc++-v3/testsuite/27_io/objects/char/1.cc >index 9fc9244baf4..d50b3884702 100644 >--- a/libstdc++-v3/testsuite/27_io/objects/char/1.cc >+++ b/libstdc++-v3/testsuite/27_io/objects/char/1.cc >@@ -53,7 +53,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> >-#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath> >diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc >index 23b2168805d..c2f3643b4e5 100644 >--- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc >+++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc >@@ -53,7 +53,6 @@ > #include <cctype> > #include <cerrno> > #include <cfloat> >-#include <ciso646> > #include <climits> > #include <clocale> > #include <cmath> >-- >2.47.0 >
On 01/11/24 20:56 +0000, Jonathan Wakely wrote: >On 31/10/24 20:09 +0000, Jonathan Wakely wrote: >>Tested x86_64-linux. Is the g++ test change OK? >> >>Also available for review at: >>https://forge.sourceware.org/gcc/gcc-TEST/pulls/4 >> >>-- >8 -- >> >>These headers make no sense for C++ programs, because they either define >>different content to the corresponding <xxx.h> C header, or define >>nothing at all in namespace std. They were all deprecated in C++17, so >>add deprecation warnings to them, which can be disabled with >>-Wno-deprecated. For C++20 and later these headers are no longer in the >>standard at all, so compiling with _GLIBCXX_USE_DEPRECATED defined to 0 >>will give an error when they are included. >> >>Because #warning is non-standard before C++23 we need to use pragmas to >>ignore -Wc++23-extensions for the -Wsystem-headers -pedantic case. >> >>One g++ test needs adjustment because it includes <ciso646>, but that >>can be made conditional on the __cplusplus value without any reduction >>in test coverage. >> >>For the library tests, consolidate the std_c++0x_neg.cc XFAIL tests into >>the macros.cc test, using dg-error with a { target c++98_only } >>selector. This avoids having two separate test files, one for C++98 and >>one for everything later. Also add tests for the <xxx.h> headers to >>ensure that they behave as expected and don't give deprecated warnings. >> >>libstdc++-v3/ChangeLog: >> >> * doc/xml/manual/evolution.xml: Document deprecations. >> * doc/html/*: Regenerate. >> * include/c_compatibility/complex.h (_GLIBCXX_COMPLEX_H): Move >> include guard to start of file. Include <complex> directly >> instead of <ccomplex>. >> * include/c_compatibility/tgmath.h: Include <cmath> and >> <complex> directly, instead of <ctgmath>. >> * include/c_global/ccomplex: Add deprecated #warning for C++17 >> and #error for C++20 if _GLIBCXX_USE_DEPRECATED == 0. >> * include/c_global/ciso646: Likewise. >> * include/c_global/cstdalign: Likewise. >> * include/c_global/cstdbool: Likewise. >> * include/c_global/ctgmath: Likewise. >> * include/c_std/ciso646: Likewise. >> * include/precompiled/stdc++.h: Do not include ccomplex, >> ciso646, cstdalign, cstdbool, or ctgmath in C++17 and later. >> * testsuite/18_support/headers/cstdalign/macros.cc: Check for >> warnings and errors for unsupported dialects. >> * testsuite/18_support/headers/cstdbool/macros.cc: Likewise. >> * testsuite/26_numerics/headers/ctgmath/complex.cc: Likewise. >> * testsuite/27_io/objects/char/1.cc: Do not include <ciso646>. >> * testsuite/27_io/objects/wchar_t/1.cc: Likewise. >> * testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc: Removed. >> * testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc: Removed. >> * testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc: Removed. >> * testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc: Removed. >> * testsuite/18_support/headers/ciso646/macros.cc: New test. >> * testsuite/18_support/headers/ciso646/macros.h.cc: New test. >> * testsuite/18_support/headers/cstdbool/macros.h.cc: New test. >> * testsuite/26_numerics/headers/ccomplex/complex.cc: New test. >> * testsuite/26_numerics/headers/ccomplex/complex.h.cc: New test. >> * testsuite/26_numerics/headers/ctgmath/complex.h.cc: New test. >> >>gcc/testsuite/ChangeLog: >> >> * g++.old-deja/g++.other/headers1.C: Do not include ciso646 for >> C++17 and later. >>--- >>.../g++.old-deja/g++.other/headers1.C | 2 + >>libstdc++-v3/doc/html/manual/api.html | 8 +++ >>libstdc++-v3/doc/xml/manual/evolution.xml | 10 ++++ >>.../include/c_compatibility/complex.h | 10 ++-- >>libstdc++-v3/include/c_compatibility/tgmath.h | 11 ++-- >>libstdc++-v3/include/c_global/ccomplex | 9 ++++ >>libstdc++-v3/include/c_global/ciso646 | 9 ++++ >>libstdc++-v3/include/c_global/cstdalign | 8 +++ >>libstdc++-v3/include/c_global/cstdbool | 8 +++ >>libstdc++-v3/include/c_global/ctgmath | 14 +++-- >>libstdc++-v3/include/c_std/ciso646 | 10 ++++ >>libstdc++-v3/include/precompiled/stdc++.h | 13 +++-- >>.../18_support/headers/ciso646/macros.cc | 51 +++++++++++++++++++ >>.../18_support/headers/ciso646/macros.h.cc | 49 ++++++++++++++++++ >>.../18_support/headers/cstdalign/macros.cc | 10 +++- >>.../18_support/headers/cstdalign/macros.h.cc | 25 +++++++++ >>.../headers/cstdalign/std_c++0x_neg.cc | 24 --------- >>.../18_support/headers/cstdbool/macros.cc | 9 +++- >>.../18_support/headers/cstdbool/macros.h.cc | 21 ++++++++ >>.../headers/cstdbool/std_c++0x_neg.cc | 26 ---------- >>.../26_numerics/headers/ccomplex/complex.cc | 10 ++++ >>.../26_numerics/headers/ccomplex/complex.h.cc | 10 ++++ >>.../headers/ccomplex/std_c++0x_neg.cc | 26 ---------- >>.../26_numerics/headers/ctgmath/complex.cc | 9 +++- >>.../26_numerics/headers/ctgmath/complex.h.cc | 10 ++++ >>.../headers/ctgmath/std_c++0x_neg.cc | 26 ---------- >>.../testsuite/27_io/objects/char/1.cc | 1 - >>.../testsuite/27_io/objects/wchar_t/1.cc | 1 - >>28 files changed, 294 insertions(+), 126 deletions(-) >>create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc >>create mode 100644 libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc >>create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc >>delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc >>create mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc >>delete mode 100644 libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc >>create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc >>create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc >>delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc >>create mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc >>delete mode 100644 libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc >> >>diff --git a/gcc/testsuite/g++.old-deja/g++.other/headers1.C b/gcc/testsuite/g++.old-deja/g++.other/headers1.C >>index 5d37e94082f..90a1a7dc8f9 100644 >>--- a/gcc/testsuite/g++.old-deja/g++.other/headers1.C >>+++ b/gcc/testsuite/g++.old-deja/g++.other/headers1.C >>@@ -12,7 +12,9 @@ >>#include <cctype> >>#include <cerrno> >>#include <cfloat> >>+#if __cplusplus < 201703L >>#include <ciso646> >>+#endif >>#include <climits> >>#include <clocale> >>#include <cmath> >>diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html >>index 799f6eae2a2..2ccfc07b83e 100644 >>--- a/libstdc++-v3/doc/html/manual/api.html >>+++ b/libstdc++-v3/doc/html/manual/api.html >>@@ -498,4 +498,12 @@ to be used with <code class="code">std::basic_istream</code>. >> longer allowed in C++20 mode. >></p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_151"></a><code class="constant">15</code></h3></div></div></div><p> >>Enabled debug assertions by default for unoptimized builds. >>+</p><p> >>+Added warnings when including the headers that were deprecated in C++17 >>+and removed in C++20: >>+<code class="filename"><ccomplex></code>, >>+<code class="filename"><ciso646></code>, >>+<code class="filename"><cstdalign></code>, >>+<code class="filename"><cstdbool></code>, and >>+<code class="filename"><ctgmath></code>. >></p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a>??</td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right">??<a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines??</td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">??Backwards Compatibility</td></tr></table></div></body></html> >>\ No newline at end of file >>diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml >>index 75cf948a4a2..6b134de0e71 100644 >>--- a/libstdc++-v3/doc/xml/manual/evolution.xml >>+++ b/libstdc++-v3/doc/xml/manual/evolution.xml >>@@ -1135,6 +1135,16 @@ to be used with <code>std::basic_istream</code>. >>Enabled debug assertions by default for unoptimized builds. >></para> >> >>+<para> >>+Added warnings when including the headers that were deprecated in C++17 >>+and removed in C++20: >>+<filename class="headerfile"><ccomplex></filename>, >>+<filename class="headerfile"><ciso646></filename>, >>+<filename class="headerfile"><cstdalign></filename>, >>+<filename class="headerfile"><cstdbool></filename>, and >>+<filename class="headerfile"><ctgmath></filename>. >>+</para> >>+ >></section> >> >></section> >>diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h >>index 605d1f30e06..461ff2117b1 100644 >>--- a/libstdc++-v3/include/c_compatibility/complex.h >>+++ b/libstdc++-v3/include/c_compatibility/complex.h >>@@ -26,10 +26,15 @@ >> * This is a Standard C++ Library header. >> */ >> >>+#ifndef _GLIBCXX_COMPLEX_H >>+#define _GLIBCXX_COMPLEX_H 1 >>+ >>#include <bits/c++config.h> >> >>#if __cplusplus >= 201103L >>-# include <ccomplex> >>+extern "C++" { >>+#include <complex> >>+} >>#endif >> >>#if __cplusplus >= 201103L && defined(__STRICT_ANSI__) >>@@ -42,7 +47,4 @@ >># endif >>#endif >> >>-#ifndef _GLIBCXX_COMPLEX_H >>-#define _GLIBCXX_COMPLEX_H 1 >>- >>#endif >>diff --git a/libstdc++-v3/include/c_compatibility/tgmath.h b/libstdc++-v3/include/c_compatibility/tgmath.h >>index aadddd91b60..6bf6727a15c 100644 >>--- a/libstdc++-v3/include/c_compatibility/tgmath.h >>+++ b/libstdc++-v3/include/c_compatibility/tgmath.h >>@@ -32,11 +32,12 @@ >>#include <bits/c++config.h> >> >>#if __cplusplus >= 201103L >>-# include <ctgmath> >>-#else >>-# if _GLIBCXX_HAVE_TGMATH_H >>-# include_next <tgmath.h> >>-# endif >>+# include <cmath> >>+extern "C++" { >>+# include <complex> >>+} >>+#elif _GLIBCXX_HAVE_TGMATH_H >>+# include_next <tgmath.h> >>#endif >> >>#endif >>diff --git a/libstdc++-v3/include/c_global/ccomplex b/libstdc++-v3/include/c_global/ccomplex >>index ee1166aaecb..b0e30fa67eb 100644 >>--- a/libstdc++-v3/include/c_global/ccomplex >>+++ b/libstdc++-v3/include/c_global/ccomplex >>@@ -41,4 +41,13 @@ extern "C++" { >>#include <complex> >>} >> >>+#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED >>+# error "<ccomplex> is not a standard header in C++20, use <complex.h>" >>+#elif __cplusplus >= 201703L && defined __DEPRECATED >>+# pragma GCC diagnostic push >>+# pragma GCC diagnostic ignored "-Wc++23-extensions" >>+# warning "<ccomplex> is deprecated in C++17, use <complex.h>" > >I'm not sure whether we should suggest <complex.h> or <complex> here. > >It's hard to know what users might have intended when including ><ccomplex>. I suppose we should suggest <complex>, since that's what >they got for <ccomplex> in C++11 and C++14. Maybe the best thing to do is not make any suggestion, and write more detailed information in https://gcc.gnu.org/gcc-15/porting_to.html
diff --git a/gcc/testsuite/g++.old-deja/g++.other/headers1.C b/gcc/testsuite/g++.old-deja/g++.other/headers1.C index 5d37e94082f..90a1a7dc8f9 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/headers1.C +++ b/gcc/testsuite/g++.old-deja/g++.other/headers1.C @@ -12,7 +12,9 @@ #include <cctype> #include <cerrno> #include <cfloat> +#if __cplusplus < 201703L #include <ciso646> +#endif #include <climits> #include <clocale> #include <cmath> diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html index 799f6eae2a2..2ccfc07b83e 100644 --- a/libstdc++-v3/doc/html/manual/api.html +++ b/libstdc++-v3/doc/html/manual/api.html @@ -498,4 +498,12 @@ to be used with <code class="code">std::basic_istream</code>. longer allowed in C++20 mode. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_151"></a><code class="constant">15</code></h3></div></div></div><p> Enabled debug assertions by default for unoptimized builds. +</p><p> +Added warnings when including the headers that were deprecated in C++17 +and removed in C++20: +<code class="filename"><ccomplex></code>, +<code class="filename"><ciso646></code>, +<code class="filename"><cstdalign></code>, +<code class="filename"><cstdbool></code>, and +<code class="filename"><ctgmath></code>. </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml b/libstdc++-v3/doc/xml/manual/evolution.xml index 75cf948a4a2..6b134de0e71 100644 --- a/libstdc++-v3/doc/xml/manual/evolution.xml +++ b/libstdc++-v3/doc/xml/manual/evolution.xml @@ -1135,6 +1135,16 @@ to be used with <code>std::basic_istream</code>. Enabled debug assertions by default for unoptimized builds. </para> +<para> +Added warnings when including the headers that were deprecated in C++17 +and removed in C++20: +<filename class="headerfile"><ccomplex></filename>, +<filename class="headerfile"><ciso646></filename>, +<filename class="headerfile"><cstdalign></filename>, +<filename class="headerfile"><cstdbool></filename>, and +<filename class="headerfile"><ctgmath></filename>. +</para> + </section> </section> diff --git a/libstdc++-v3/include/c_compatibility/complex.h b/libstdc++-v3/include/c_compatibility/complex.h index 605d1f30e06..461ff2117b1 100644 --- a/libstdc++-v3/include/c_compatibility/complex.h +++ b/libstdc++-v3/include/c_compatibility/complex.h @@ -26,10 +26,15 @@ * This is a Standard C++ Library header. */ +#ifndef _GLIBCXX_COMPLEX_H +#define _GLIBCXX_COMPLEX_H 1 + #include <bits/c++config.h> #if __cplusplus >= 201103L -# include <ccomplex> +extern "C++" { +#include <complex> +} #endif #if __cplusplus >= 201103L && defined(__STRICT_ANSI__) @@ -42,7 +47,4 @@ # endif #endif -#ifndef _GLIBCXX_COMPLEX_H -#define _GLIBCXX_COMPLEX_H 1 - #endif diff --git a/libstdc++-v3/include/c_compatibility/tgmath.h b/libstdc++-v3/include/c_compatibility/tgmath.h index aadddd91b60..6bf6727a15c 100644 --- a/libstdc++-v3/include/c_compatibility/tgmath.h +++ b/libstdc++-v3/include/c_compatibility/tgmath.h @@ -32,11 +32,12 @@ #include <bits/c++config.h> #if __cplusplus >= 201103L -# include <ctgmath> -#else -# if _GLIBCXX_HAVE_TGMATH_H -# include_next <tgmath.h> -# endif +# include <cmath> +extern "C++" { +# include <complex> +} +#elif _GLIBCXX_HAVE_TGMATH_H +# include_next <tgmath.h> #endif #endif diff --git a/libstdc++-v3/include/c_global/ccomplex b/libstdc++-v3/include/c_global/ccomplex index ee1166aaecb..b0e30fa67eb 100644 --- a/libstdc++-v3/include/c_global/ccomplex +++ b/libstdc++-v3/include/c_global/ccomplex @@ -41,4 +41,13 @@ extern "C++" { #include <complex> } +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<ccomplex> is not a standard header in C++20, use <complex.h>" +#elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<ccomplex> is deprecated in C++17, use <complex.h>" +# pragma GCC diagnostic pop +#endif + #endif diff --git a/libstdc++-v3/include/c_global/ciso646 b/libstdc++-v3/include/c_global/ciso646 index 6e26f9be12e..ed1fcf6f14e 100644 --- a/libstdc++-v3/include/c_global/ciso646 +++ b/libstdc++-v3/include/c_global/ciso646 @@ -38,4 +38,13 @@ #include <bits/c++config.h> +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" +#elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" +# pragma GCC diagnostic pop +#endif + #endif diff --git a/libstdc++-v3/include/c_global/cstdalign b/libstdc++-v3/include/c_global/cstdalign index 4f610588425..f7bbbad82a0 100644 --- a/libstdc++-v3/include/c_global/cstdalign +++ b/libstdc++-v3/include/c_global/cstdalign @@ -40,6 +40,14 @@ # if _GLIBCXX_HAVE_STDALIGN_H # include <stdalign.h> # endif +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<cstdalign> is not a standard header in C++20, use <stdalign.h>" +# elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<cstdalign> is deprecated in C++17, use <stdalign.h>" +# pragma GCC diagnostic pop +# endif #endif #endif diff --git a/libstdc++-v3/include/c_global/cstdbool b/libstdc++-v3/include/c_global/cstdbool index 8d2e75df33f..27be50ff510 100644 --- a/libstdc++-v3/include/c_global/cstdbool +++ b/libstdc++-v3/include/c_global/cstdbool @@ -40,6 +40,14 @@ # if _GLIBCXX_HAVE_STDBOOL_H # include <stdbool.h> # endif +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<cstdbool> is not a standard header in C++20, use <stdbool.h>" +# elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<cstdbool> is deprecated in C++17, use <stdbool.h>" +# pragma GCC diagnostic pop +# endif #endif #endif diff --git a/libstdc++-v3/include/c_global/ctgmath b/libstdc++-v3/include/c_global/ctgmath index 79c1a029f41..5824a20c7c0 100644 --- a/libstdc++-v3/include/c_global/ctgmath +++ b/libstdc++-v3/include/c_global/ctgmath @@ -26,13 +26,13 @@ * This is a Standard C++ Library header. */ +#ifndef _GLIBCXX_CTGMATH +#define _GLIBCXX_CTGMATH 1 + #ifdef _GLIBCXX_SYSHDR #pragma GCC system_header #endif -#ifndef _GLIBCXX_CTGMATH -#define _GLIBCXX_CTGMATH 1 - #if __cplusplus < 201103L # include <bits/c++0x_warning.h> #else @@ -40,6 +40,14 @@ extern "C++" { # include <complex> } +# if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<ctgmath> is not a standard header in C++20, use <tgmath.h>" +# elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<ctgmath> is deprecated in C++17, use <tgmath.h>" +# pragma GCC diagnostic pop +# endif #endif #endif diff --git a/libstdc++-v3/include/c_std/ciso646 b/libstdc++-v3/include/c_std/ciso646 index 7971f0d0c31..ac9801aef2b 100644 --- a/libstdc++-v3/include/c_std/ciso646 +++ b/libstdc++-v3/include/c_std/ciso646 @@ -37,4 +37,14 @@ #endif #include <bits/c++config.h> + +#if __cplusplus >= 202002L && ! _GLIBCXX_USE_DEPRECATED +# error "<ciso646> is not a standard header in C++20, use <iso646.h> or <version>" +#elif __cplusplus >= 201703L && defined __DEPRECATED +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc++23-extensions" +# warning "<ciso646> is deprecated in C++17, use <iso646.h> or <version>" +# pragma GCC diagnostic pop +#endif + #endif diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h index 3eef20d1645..89917106bac 100644 --- a/libstdc++-v3/include/precompiled/stdc++.h +++ b/libstdc++-v3/include/precompiled/stdc++.h @@ -34,7 +34,6 @@ #endif #include <cctype> #include <cfloat> -#include <ciso646> #include <climits> #include <csetjmp> #include <cstdarg> @@ -43,6 +42,9 @@ #if __cplusplus >= 201103L #include <cstdint> +#if __cplusplus < 201703L +#include <ciso646> +#endif #endif // C++ @@ -108,7 +110,6 @@ #include <cctype> #include <cerrno> #include <cfloat> -#include <ciso646> #include <climits> #include <clocale> #include <cmath> @@ -124,14 +125,16 @@ #include <cwctype> #if __cplusplus >= 201103L -#include <ccomplex> #include <cfenv> #include <cinttypes> +#include <cstdint> +#include <cuchar> +#if __cplusplus < 201703L +#include <ccomplex> #include <cstdalign> #include <cstdbool> -#include <cstdint> #include <ctgmath> -#include <cuchar> +#endif #endif // C++ diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc new file mode 100644 index 00000000000..ab3a041de06 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.cc @@ -0,0 +1,51 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } +// { dg-do preprocess } + +#include <ciso646> + +// { dg-warning "deprecated" "" { target c++17_only } 0 } +// { dg-error "not a standard header" "" { target c++20 } 0 } + +#ifdef and +# error "The header <ciso646> defines a macro named and" +#endif + +#ifdef and_eq +# error "The header <ciso646> defines a macro named and_eq" +#endif + +#ifdef bitand +# error "The header <ciso646> defines a macro named bitand" +#endif + +#ifdef bitor +# error "The header <ciso646> defines a macro named bitor" +#endif + +#ifdef compl +# error "The header <ciso646> defines a macro named compl" +#endif + +#ifdef not +# error "The header <ciso646> defines a macro named not" +#endif + +#ifdef not_eq +# error "The header <ciso646> defines a macro named not_eq" +#endif + +#ifdef or +# error "The header <ciso646> defines a macro named or" +#endif + +#ifdef or_eq +# error "The header <ciso646> defines a macro named or_eq" +#endif + +#ifdef xor +# error "The header <ciso646> defines a macro named xor" +#endif + +#ifdef xor_eq +# error "The header <ciso646> defines a macro named xor_eq" +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc new file mode 100644 index 00000000000..a70c18de918 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/ciso646/macros.h.cc @@ -0,0 +1,49 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated -fno-operator-names" } +// { dg-do preprocess } +// { dg-bogus "deprecated" "C++17 deprecated <ciso646> but not <iso646.h>" } + +#include <iso646.h> + +#ifdef and +# error "The header <iso646.h> defines a macro named and" +#endif + +#ifdef and_eq +# error "The header <iso646.h> defines a macro named and_eq" +#endif + +#ifdef bitand +# error "The header <iso646.h> defines a macro named bitand" +#endif + +#ifdef bitor +# error "The header <iso646.h> defines a macro named bitor" +#endif + +#ifdef compl +# error "The header <iso646.h> defines a macro named compl" +#endif + +#ifdef not +# error "The header <iso646.h> defines a macro named not" +#endif + +#ifdef not_eq +# error "The header <iso646.h> defines a macro named not_eq" +#endif + +#ifdef or +# error "The header <iso646.h> defines a macro named or" +#endif + +#ifdef or_eq +# error "The header <iso646.h> defines a macro named or_eq" +#endif + +#ifdef xor +# error "The header <iso646.h> defines a macro named xor" +#endif + +#ifdef xor_eq +# error "The header <iso646.h> defines a macro named xor_eq" +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc index c50c921cd59..793cd26dfa8 100644 --- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc +++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.cc @@ -1,8 +1,13 @@ -// { dg-options "-D_GLIBCXX_USE_DEPRECATED=1 -Wno-deprecated" } -// { dg-do preprocess { target c++11 } } +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do preprocess } #include <cstdalign> +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } +// { dg-warning "deprecated" "" { target c++17_only } 0 } +// { dg-error "not a standard header" "" { target c++20 } 0 } + +#if __cplusplus >= 201103L #ifndef __alignas_is_defined # error "The header <cstdalign> fails to define a macro named __alignas_is_defined" #elif __alignas_is_defined != 1 @@ -22,3 +27,4 @@ #ifdef alignof # error "The header <cstdalign> defines a macro named alignof" #endif +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc new file mode 100644 index 00000000000..78f41ae02e8 --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdalign/macros.h.cc @@ -0,0 +1,25 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do preprocess { target c++11 } } +// { dg-bogus "deprecated" "C++17 deprecated <cstdalign> but not <stdalign.h>" } + +#include <stdalign.h> + +#ifndef __alignas_is_defined +# error "The header <stdalign.h> fails to define a macro named __alignas_is_defined" +#elif __alignas_is_defined != 1 +# error "__alignas_is_defined is not defined to 1 in <stdalign.h>" +#endif + +#ifndef __alignof_is_defined +# error "The header <stdalign.h> fails to define a macro named __alignof_is_defined" +#elif __alignof_is_defined != 1 +# error "__alignof_is_defined is not defined to 1 in <stdalign.h>" +#endif + +#ifdef alignas +# error "The header <stdalign.h> defines a macro named alignas" +#endif + +#ifdef alignof +# error "The header <stdalign.h> defines a macro named alignof" +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc deleted file mode 100644 index 14694f034e6..00000000000 --- a/libstdc++-v3/testsuite/18_support/headers/cstdalign/std_c++0x_neg.cc +++ /dev/null @@ -1,24 +0,0 @@ -// { dg-options "-std=gnu++98" } -// { dg-do compile { target c++98_only } } - -// Copyright (C) 2011-2024 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <cstdalign> - -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } - diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc index e0afc26e458..658a02a4565 100644 --- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc +++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.cc @@ -1,4 +1,5 @@ -// { dg-do compile { target c++11 } } +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do preprocess } // Copyright (C) 2012-2024 Free Software Foundation, Inc. // @@ -19,6 +20,11 @@ #include <cstdbool> +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } +// { dg-warning "deprecated" "" { target c++17_only } 0 } +// { dg-error "not a standard header" "" { target c++20 } 0 } + +#if __cplusplus >= 201103L #ifndef __bool_true_false_are_defined # error "The header <cstdbool> fails to define a macro named __bool_true_false_are_defined" #endif @@ -34,3 +40,4 @@ #ifdef false # error "The header <cstdbool> defines a macro named false" #endif +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc new file mode 100644 index 00000000000..a3c0f9a0aec --- /dev/null +++ b/libstdc++-v3/testsuite/18_support/headers/cstdbool/macros.h.cc @@ -0,0 +1,21 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do preprocess { target c++11 } } +// { dg-bogus "deprecated" "C++17 deprecated <cstdbool> but not <stdbool.h>" } + +#include <stdbool.h> + +#ifndef __bool_true_false_are_defined +# error "The header <stdbool.h> fails to define a macro named __bool_true_false_are_defined" +#endif + +#ifdef bool +# error "The header <stdbool.h> defines a macro named bool" +#endif + +#ifdef true +# error "The header <stdbool.h> defines a macro named true" +#endif + +#ifdef false +# error "The header <stdbool.h> defines a macro named false" +#endif diff --git a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc b/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc deleted file mode 100644 index 5b8c5688877..00000000000 --- a/libstdc++-v3/testsuite/18_support/headers/cstdbool/std_c++0x_neg.cc +++ /dev/null @@ -1,26 +0,0 @@ -// { dg-options "-std=gnu++98" } -// { dg-do compile { target c++98_only } } - -// Copyright (C) 2007-2024 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <cstdbool> - -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } - - - diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc new file mode 100644 index 00000000000..d6c33781ae5 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.cc @@ -0,0 +1,10 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do compile } + +#include <ccomplex> + +std::complex<double> d; + +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } +// { dg-warning "deprecated" "" { target c++17_only } 0 } +// { dg-error "not a standard header" "" { target c++20 } 0 } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc new file mode 100644 index 00000000000..318b78ee89e --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/complex.h.cc @@ -0,0 +1,10 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do compile } +// { dg-bogus "deprecated" "C++17 deprecated <ccomplex> but not <complex.h>" } + +#include <complex.h> + +#if __cplusplus < 201103L +# undef complex +#endif +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc deleted file mode 100644 index 16c623b25b0..00000000000 --- a/libstdc++-v3/testsuite/26_numerics/headers/ccomplex/std_c++0x_neg.cc +++ /dev/null @@ -1,26 +0,0 @@ -// { dg-options "-std=gnu++98" } -// { dg-do compile { target c++98_only } } - -// Copyright (C) 2007-2024 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <ccomplex> - -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } - - - diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc index a2c4a55c89b..ef2bbd0e20a 100644 --- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc +++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.cc @@ -15,8 +15,13 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-do compile { target c++11 } } +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do compile } #include <ctgmath> -std::complex<double> d; +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } + +// { dg-error "ISO C.. 2011" "" { target c++98_only } 0 } +// { dg-warning "deprecated" "" { target c++17_only } 0 } +// { dg-error "not a standard header" "" { target c++20 } 0 } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc new file mode 100644 index 00000000000..fd6847bff4f --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/complex.h.cc @@ -0,0 +1,10 @@ +// { dg-options "-D_GLIBCXX_USE_DEPRECATED=0 -Wdeprecated" } +// { dg-do compile } +// { dg-bogus "deprecated" "C++17 deprecated <ctgmath> but not <tgmath.h>" } + +#include <tgmath.h> + +#if __cplusplus < 201103L +# undef complex +#endif +std::complex<double> d; // { dg-error "does not name a template" "" { target c++98_only } 0 } diff --git a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc b/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc deleted file mode 100644 index d693c8b23ed..00000000000 --- a/libstdc++-v3/testsuite/26_numerics/headers/ctgmath/std_c++0x_neg.cc +++ /dev/null @@ -1,26 +0,0 @@ -// { dg-options "-std=gnu++98" } -// { dg-do compile { target c++98_only } } - -// Copyright (C) 2007-2024 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -#include <ctgmath> - -// { dg-error "ISO C.. 2011" "" { target *-*-* } 32 } - - - diff --git a/libstdc++-v3/testsuite/27_io/objects/char/1.cc b/libstdc++-v3/testsuite/27_io/objects/char/1.cc index 9fc9244baf4..d50b3884702 100644 --- a/libstdc++-v3/testsuite/27_io/objects/char/1.cc +++ b/libstdc++-v3/testsuite/27_io/objects/char/1.cc @@ -53,7 +53,6 @@ #include <cctype> #include <cerrno> #include <cfloat> -#include <ciso646> #include <climits> #include <clocale> #include <cmath> diff --git a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc index 23b2168805d..c2f3643b4e5 100644 --- a/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/27_io/objects/wchar_t/1.cc @@ -53,7 +53,6 @@ #include <cctype> #include <cerrno> #include <cfloat> -#include <ciso646> #include <climits> #include <clocale> #include <cmath>