[gcc r15-3893] libstdc++: Fix std::basic_stracktrace to not assume allocators throw std::bad_alloc

Jonathan Wakely redi@gcc.gnu.org
Thu Sep 26 11:49:46 GMT 2024


https://gcc.gnu.org/g:c45844eb7dadcd48e3ce84444a45c270382f7ad1

commit r15-3893-gc45844eb7dadcd48e3ce84444a45c270382f7ad1
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Sep 24 12:44:09 2024 +0100

    libstdc++: Fix std::basic_stracktrace to not assume allocators throw std::bad_alloc
    
    The standard allows allocators to throw any kind of exception, not only
    something that can be caught as std::bad_alloc. std::basic_stracktrace
    was assuming std::bad_alloc.
    
    libstdc++-v3/ChangeLog:
    
            * include/std/stacktrace (basic_stacktrace::_Impl::_M_allocate):
            Do not assume allocators only throw std::bad_alloc.

Diff:
---
 libstdc++-v3/include/std/stacktrace | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/include/std/stacktrace b/libstdc++-v3/include/std/stacktrace
index de7446064c74..58d0c2a0fc22 100644
--- a/libstdc++-v3/include/std/stacktrace
+++ b/libstdc++-v3/include/std/stacktrace
@@ -560,7 +560,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	      if constexpr (is_same_v<allocator_type, allocator<value_type>>)
 		{
 		  // For std::allocator we use nothrow-new directly so we
-		  // don't need to handle bad_alloc exceptions.
+		  // don't need to handle exceptions from __alloc.allocate(n).
 		  auto __p = __detail::__get_temporary_buffer<value_type>(__n);
 		  if (__p == nullptr) [[unlikely]]
 		    return nullptr;
@@ -572,7 +572,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 		    {
 		      _M_frames = __alloc.allocate(__n);
 		    }
-		  __catch (const std::bad_alloc&)
+		  __catch (...)
 		    {
 		      return nullptr;
 		    }


More information about the Gcc-cvs mailing list