From: Jonathan Wakely Date: Wed, 12 Feb 2025 19:52:01 +0000 (+0000) Subject: libstdc++: Combine three tests into one X-Git-Tag: basepoints/gcc-16~2000 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08f70200ce01eea42eed7c6fcdcf300a8812be95;p=thirdparty%2Fgcc.git libstdc++: Combine three tests into one Instead of a test with { target c++11_only } and another with c++14_only and another with c++17 we can have a single test that uses { target c++11 }. This avoids needing to make edits to three very similar tests. Also fix the signatures for std::cbegin and std::cend which had the wrong expression in the trailing-return-type and were missing their constexpr and conditional noexcept (which were always present even in C++14). That was wrong in two files, but now only needs to be fixed in one place! libstdc++-v3/ChangeLog: * testsuite/24_iterators/headers/iterator/range_access_c++11.cc: Removed. * testsuite/24_iterators/headers/iterator/range_access_c++14.cc: Removed. * testsuite/24_iterators/headers/iterator/range_access_c++17.cc: Removed. * testsuite/24_iterators/headers/iterator/range_access.cc: New test. --- diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc new file mode 100644 index 000000000000..23676ad1d7a3 --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc @@ -0,0 +1,107 @@ +// { dg-do compile { target c++11 } } + +// Copyright (C) 2010-2025 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 +// . + +#include + +#ifdef _GLIBCXX_RELEASE +// Conditional noexcept on these functions is a libstdc++ extension +# define NOTHROW(F) noexcept(noexcept(c.F())) +#else +# define NOTHROW(F) +#endif + +#if __cplusplus >= 201703L +# define CONSTEXPR_17 constexpr +#else +# define CONSTEXPR_17 +#endif + +#if __cplusplus >= 201402L +# define CONSTEXPR_14 constexpr +#else +# define CONSTEXPR_14 +#endif + +namespace std +{ + template + CONSTEXPR_17 auto + begin(C& c) NOTHROW(begin) -> decltype(c.begin()); + template + CONSTEXPR_17 auto + begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); + + template + CONSTEXPR_17 auto + end(C& c) NOTHROW(end) -> decltype(c.end()); + template + CONSTEXPR_17 auto + end(const C& c) NOTHROW(end) -> decltype(c.end()); + + template + CONSTEXPR_14 T* + begin(T (&array)[N]) noexcept; + template + CONSTEXPR_14 T* + end(T (&array)[N]) noexcept; + +#if __cplusplus >= 201402L + template + constexpr auto + cbegin(const C& c) noexcept(noexcept(std::begin(c))) -> decltype(c.begin()); + template + constexpr auto + cend(const C& c) noexcept(noexcept(std::end(c)))-> decltype(c.end()); + + template + CONSTEXPR_17 auto + rbegin(C& c) -> decltype(c.rbegin()); + template + CONSTEXPR_17 auto + rbegin(const C& c) -> decltype(c.rbegin()); + + template + CONSTEXPR_17 auto + rend(C& c) -> decltype(c.rend()); + template + CONSTEXPR_17 auto + rend(const C& c) -> decltype(c.rend()); + + template + CONSTEXPR_17 reverse_iterator + rbegin(T (&array)[N]) noexcept; + template + CONSTEXPR_17 reverse_iterator + rend(T (&array)[N]) noexcept; + + template + CONSTEXPR_17 reverse_iterator + rbegin(initializer_list) noexcept; + template + CONSTEXPR_17 reverse_iterator + rend(initializer_list) noexcept; + + template + CONSTEXPR_17 auto + crbegin(const C& c) -> decltype(std::rbegin(c)); + template + CONSTEXPR_17 auto + cend(const C& c) -> decltype(std::rend(c)); +#endif // C++14 +} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc deleted file mode 100644 index 50f580531120..000000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc +++ /dev/null @@ -1,40 +0,0 @@ -// { dg-options "-std=gnu++11" } -// { dg-do compile { target c++11_only } } - -// Copyright (C) 2010-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template T* begin(T (&array)[N]) noexcept; - template T* end(T (&array)[N]) noexcept; -} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc deleted file mode 100644 index 6e56927c6a4e..000000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc +++ /dev/null @@ -1,64 +0,0 @@ -// { dg-options "-std=gnu++14" } -// { dg-do compile { target c++14_only } } - -// Copyright (C) 2016-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template constexpr T* begin(T (&array)[N]) noexcept; - template constexpr T* end(T (&array)[N]) noexcept; - - template auto cbegin(const C& c) -> decltype(c.begin()); - template auto cend(const C& c) -> decltype(c.end()); - - template auto rbegin(C& c) -> decltype(c.rbegin()); - template auto rbegin(const C& c) -> decltype(c.rbegin()); - - template auto rend(C& c) -> decltype(c.rend()); - template auto rend(const C& c) -> decltype(c.rend()); - - template - reverse_iterator rbegin(T (&array)[N]) noexcept; - template - reverse_iterator rend(T (&array)[N]) noexcept; - - template - reverse_iterator rbegin(initializer_list) noexcept; - template - reverse_iterator rend(initializer_list) noexcept; - - template - auto crbegin(const C& c) -> decltype(std::rbegin(c)); - template - auto cend(const C& c) -> decltype(std::rend(c)); -} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc deleted file mode 100644 index e6c1c9a9496c..000000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc +++ /dev/null @@ -1,63 +0,0 @@ -// { dg-do compile { target c++17 } } - -// Copyright (C) 2016-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template constexpr auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template constexpr auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template constexpr auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template constexpr auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template constexpr T* begin(T (&array)[N]) noexcept; - template constexpr T* end(T (&array)[N]) noexcept; - - template constexpr auto cbegin(const C& c) -> decltype(c.begin()); - template constexpr auto cend(const C& c) -> decltype(c.end()); - - template constexpr auto rbegin(C& c) -> decltype(c.rbegin()); - template constexpr auto rbegin(const C& c) -> decltype(c.rbegin()); - - template constexpr auto rend(C& c) -> decltype(c.rend()); - template constexpr auto rend(const C& c) -> decltype(c.rend()); - - template - constexpr reverse_iterator rbegin(T (&array)[N]) noexcept; - template - constexpr reverse_iterator rend(T (&array)[N]) noexcept; - - template - constexpr reverse_iterator rbegin(initializer_list) noexcept; - template - constexpr reverse_iterator rend(initializer_list) noexcept; - - template - constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c)); - template - constexpr auto cend(const C& c) -> decltype(std::rend(c)); -}