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>" +# 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> -- 2.47.0