]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Combine three tests into one
authorJonathan Wakely <jwakely@redhat.com>
Wed, 12 Feb 2025 19:52:01 +0000 (19:52 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Sat, 15 Feb 2025 10:58:55 +0000 (10:58 +0000)
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.

libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc [new file with mode: 0644]
libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc [deleted file]
libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc [deleted file]
libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc [deleted file]

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 (file)
index 0000000..23676ad
--- /dev/null
@@ -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 (file)
index 50f5805..0000000
+++ /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 (file)
index 6e56927..0000000
+++ /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 (file)
index e6c1c9a..0000000
+++ /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));
-}