From: Jonathan Wakely Date: Tue, 10 Sep 2024 15:59:29 +0000 (+0100) Subject: libstdc++: Add missing exception specifications in tests X-Git-Tag: basepoints/gcc-16~5980 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e1e50458b2004d0f08ac8c64f89b85fc1a87057;p=thirdparty%2Fgcc.git 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. --- diff --git a/libstdc++-v3/testsuite/18_support/new_nothrow.cc b/libstdc++-v3/testsuite/18_support/new_nothrow.cc index a3251f5ad64e..551b71dfa589 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(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 87670090f72f..8c33974c2e96 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 - constexpr common_type_t gcd(M m, N n); + constexpr common_type_t gcd(M m, N n) noexcept; template - constexpr common_type_t lcm(M m, N n); + constexpr common_type_t lcm(M m, N n) noexcept; template constexpr T midpoint(T a, T b) noexcept;