aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-02-12 19:52:01 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2025-02-15 10:58:55 +0000
commit08f70200ce01eea42eed7c6fcdcf300a8812be95 (patch)
tree85233e9f35e84b8d4f874b95eaaceb44b65b5457
parentfd00010ba21c04bddb20aef52f62de5636075067 (diff)
downloadgcc-08f70200ce01eea42eed7c6fcdcf300a8812be95.zip
gcc-08f70200ce01eea42eed7c6fcdcf300a8812be95.tar.gz
gcc-08f70200ce01eea42eed7c6fcdcf300a8812be95.tar.bz2
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.
-rw-r--r--libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc107
-rw-r--r--libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc40
-rw-r--r--libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc64
-rw-r--r--libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc63
4 files changed, 107 insertions, 167 deletions
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 0000000..23676ad
--- /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
+// <http://www.gnu.org/licenses/>.
+
+#include <iterator>
+
+#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<class C>
+ CONSTEXPR_17 auto
+ begin(C& c) NOTHROW(begin) -> decltype(c.begin());
+ template<class C>
+ CONSTEXPR_17 auto
+ begin(const C& c) NOTHROW(begin) -> decltype(c.begin());
+
+ template<class C>
+ CONSTEXPR_17 auto
+ end(C& c) NOTHROW(end) -> decltype(c.end());
+ template<class C>
+ CONSTEXPR_17 auto
+ end(const C& c) NOTHROW(end) -> decltype(c.end());
+
+ template<class T, size_t N>
+ CONSTEXPR_14 T*
+ begin(T (&array)[N]) noexcept;
+ template<class T, size_t N>
+ CONSTEXPR_14 T*
+ end(T (&array)[N]) noexcept;
+
+#if __cplusplus >= 201402L
+ template<class C>
+ constexpr auto
+ cbegin(const C& c) noexcept(noexcept(std::begin(c))) -> decltype(c.begin());
+ template<class C>
+ constexpr auto
+ cend(const C& c) noexcept(noexcept(std::end(c)))-> decltype(c.end());
+
+ template<class C>
+ CONSTEXPR_17 auto
+ rbegin(C& c) -> decltype(c.rbegin());
+ template<class C>
+ CONSTEXPR_17 auto
+ rbegin(const C& c) -> decltype(c.rbegin());
+
+ template<class C>
+ CONSTEXPR_17 auto
+ rend(C& c) -> decltype(c.rend());
+ template<class C>
+ CONSTEXPR_17 auto
+ rend(const C& c) -> decltype(c.rend());
+
+ template<class T, size_t N>
+ CONSTEXPR_17 reverse_iterator<T*>
+ rbegin(T (&array)[N]) noexcept;
+ template<class T, size_t N>
+ CONSTEXPR_17 reverse_iterator<T*>
+ rend(T (&array)[N]) noexcept;
+
+ template<class E>
+ CONSTEXPR_17 reverse_iterator<const E*>
+ rbegin(initializer_list<E>) noexcept;
+ template<class E>
+ CONSTEXPR_17 reverse_iterator<const E*>
+ rend(initializer_list<E>) noexcept;
+
+ template<class C>
+ CONSTEXPR_17 auto
+ crbegin(const C& c) -> decltype(std::rbegin(c));
+ template<class C>
+ 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 50f5805..0000000
--- 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
-// <http://www.gnu.org/licenses/>.
-
-#include <iterator>
-
-#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<class C> auto begin(C& c) NOTHROW(begin) -> decltype(c.begin());
- template<class C> auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin());
-
- template<class C> auto end(C& c) NOTHROW(end) -> decltype(c.end());
- template<class C> auto end(const C& c) NOTHROW(end) -> decltype(c.end());
-
- template<class T, size_t N> T* begin(T (&array)[N]) noexcept;
- template<class T, size_t N> 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 6e56927..0000000
--- 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
-// <http://www.gnu.org/licenses/>.
-
-#include <iterator>
-
-#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<class C> auto begin(C& c) NOTHROW(begin) -> decltype(c.begin());
- template<class C> auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin());
-
- template<class C> auto end(C& c) NOTHROW(end) -> decltype(c.end());
- template<class C> auto end(const C& c) NOTHROW(end) -> decltype(c.end());
-
- template<class T, size_t N> constexpr T* begin(T (&array)[N]) noexcept;
- template<class T, size_t N> constexpr T* end(T (&array)[N]) noexcept;
-
- template<class C> auto cbegin(const C& c) -> decltype(c.begin());
- template<class C> auto cend(const C& c) -> decltype(c.end());
-
- template<class C> auto rbegin(C& c) -> decltype(c.rbegin());
- template<class C> auto rbegin(const C& c) -> decltype(c.rbegin());
-
- template<class C> auto rend(C& c) -> decltype(c.rend());
- template<class C> auto rend(const C& c) -> decltype(c.rend());
-
- template<class T, size_t N>
- reverse_iterator<T*> rbegin(T (&array)[N]) noexcept;
- template<class T, size_t N>
- reverse_iterator<T*> rend(T (&array)[N]) noexcept;
-
- template<class E>
- reverse_iterator<const E*> rbegin(initializer_list<E>) noexcept;
- template<class E>
- reverse_iterator<const E*> rend(initializer_list<E>) noexcept;
-
- template<class C>
- auto crbegin(const C& c) -> decltype(std::rbegin(c));
- template<class C>
- 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 e6c1c9a..0000000
--- 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
-// <http://www.gnu.org/licenses/>.
-
-#include <iterator>
-
-#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<class C> constexpr auto begin(C& c) NOTHROW(begin) -> decltype(c.begin());
- template<class C> constexpr auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin());
-
- template<class C> constexpr auto end(C& c) NOTHROW(end) -> decltype(c.end());
- template<class C> constexpr auto end(const C& c) NOTHROW(end) -> decltype(c.end());
-
- template<class T, size_t N> constexpr T* begin(T (&array)[N]) noexcept;
- template<class T, size_t N> constexpr T* end(T (&array)[N]) noexcept;
-
- template<class C> constexpr auto cbegin(const C& c) -> decltype(c.begin());
- template<class C> constexpr auto cend(const C& c) -> decltype(c.end());
-
- template<class C> constexpr auto rbegin(C& c) -> decltype(c.rbegin());
- template<class C> constexpr auto rbegin(const C& c) -> decltype(c.rbegin());
-
- template<class C> constexpr auto rend(C& c) -> decltype(c.rend());
- template<class C> constexpr auto rend(const C& c) -> decltype(c.rend());
-
- template<class T, size_t N>
- constexpr reverse_iterator<T*> rbegin(T (&array)[N]) noexcept;
- template<class T, size_t N>
- constexpr reverse_iterator<T*> rend(T (&array)[N]) noexcept;
-
- template<class E>
- constexpr reverse_iterator<const E*> rbegin(initializer_list<E>) noexcept;
- template<class E>
- constexpr reverse_iterator<const E*> rend(initializer_list<E>) noexcept;
-
- template<class C>
- constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c));
- template<class C>
- constexpr auto cend(const C& c) -> decltype(std::rend(c));
-}