aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-09-10 16:59:29 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2024-09-10 17:33:32 +0100
commit4e1e50458b2004d0f08ac8c64f89b85fc1a87057 (patch)
tree8c09932e3d445aa80f765b89b2dadcff1679d8eb
parent2801a49d1144bce5568b527d1972952ad3420f66 (diff)
downloadgcc-4e1e50458b2004d0f08ac8c64f89b85fc1a87057.zip
gcc-4e1e50458b2004d0f08ac8c64f89b85fc1a87057.tar.gz
gcc-4e1e50458b2004d0f08ac8c64f89b85fc1a87057.tar.bz2
libstdc++: Add missing exception specifications in tests
Since r15-3532-g7cebc6384a0ad6 18_support/new_nothrow.cc fails in C++98 mode because G++ diagnoses missing exception specifications for the user-defined (de)allocation functions. Add throw(std::bad_alloc) and throw() for C++98 mode. Similarly, 26_numerics/headers/numeric/synopsis.cc fails in C++20 mode because the declarations of gcd and lcm are not noexcept. libstdc++-v3/ChangeLog: * testsuite/18_support/new_nothrow.cc (THROW_BAD_ALLOC): Define macro to add exception specifications for C++98 mode. (NOEXCEPT): Expand to throw() for C++98 mode. * testsuite/26_numerics/headers/numeric/synopsis.cc (gcd, lcm): Add noexcept.
-rw-r--r--libstdc++-v3/testsuite/18_support/new_nothrow.cc18
-rw-r--r--libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc4
2 files changed, 12 insertions, 10 deletions
diff --git a/libstdc++-v3/testsuite/18_support/new_nothrow.cc b/libstdc++-v3/testsuite/18_support/new_nothrow.cc
index a3251f5..551b71d 100644
--- a/libstdc++-v3/testsuite/18_support/new_nothrow.cc
+++ b/libstdc++-v3/testsuite/18_support/new_nothrow.cc
@@ -41,7 +41,15 @@ static void new_handler ()
throw MyBadAlloc ();
}
-void* operator new (size_t n)
+#if __cplusplus >= 201103L
+# define THROW_BAD_ALLOC noexcept(false)
+# define NOEXCEPT noexcept
+# else
+# define THROW_BAD_ALLOC throw(std::bad_alloc)
+# define NOEXCEPT throw()
+#endif
+
+void* operator new (size_t n) THROW_BAD_ALLOC
{
static size_t cntr;
@@ -64,12 +72,6 @@ void* operator new (size_t n)
}
}
-#if __cplusplus >= 201103L
-#define NOEXCEPT noexcept
-#else
-#define NOEXCEPT
-#endif
-
void operator delete (void *p) NOEXCEPT
{
++delete_called;
@@ -77,7 +79,7 @@ void operator delete (void *p) NOEXCEPT
free (static_cast<size_t*>(p) - 1);
}
-void* operator new[] (size_t n)
+void* operator new[] (size_t n) THROW_BAD_ALLOC
{
++new_vec_called;
return operator new(n);
diff --git a/libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc b/libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc
index 8767009..8c33974 100644
--- a/libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc
+++ b/libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc
@@ -161,10 +161,10 @@ namespace std {
#if __cplusplus > 201703L
template<class M, class N>
- constexpr common_type_t<M,N> gcd(M m, N n);
+ constexpr common_type_t<M,N> gcd(M m, N n) noexcept;
template<class M, class N>
- constexpr common_type_t<M,N> lcm(M m, N n);
+ constexpr common_type_t<M,N> lcm(M m, N n) noexcept;
template<class T>
constexpr T midpoint(T a, T b) noexcept;