diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-09-10 16:59:29 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-09-10 17:33:32 +0100 |
commit | 4e1e50458b2004d0f08ac8c64f89b85fc1a87057 (patch) | |
tree | 8c09932e3d445aa80f765b89b2dadcff1679d8eb | |
parent | 2801a49d1144bce5568b527d1972952ad3420f66 (diff) | |
download | gcc-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.cc | 18 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/26_numerics/headers/numeric/synopsis.cc | 4 |
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; |