https://gcc.gnu.org/g:2b44ca5a76dffcedacbec2ccf0917f8039e192b1

commit r13-9472-g2b44ca5a76dffcedacbec2ccf0917f8039e192b1
Author: Jonathan Wakely <jwak...@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.
    
    (cherry picked from commit c45844eb7dadcd48e3ce84444a45c270382f7ad1)

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 79bd092c479c..9d4b3a5a8c06 100644
--- a/libstdc++-v3/include/std/stacktrace
+++ b/libstdc++-v3/include/std/stacktrace
@@ -618,7 +618,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).
                  size_t __nb = __n * sizeof(value_type);
                  void* const __p = _GLIBCXX_OPERATOR_NEW (__nb, nothrow_t{});
                  if (__p == nullptr) [[unlikely]]
@@ -631,7 +631,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                    {
                      _M_frames = __alloc.allocate(__n);
                    }
-                 __catch (const std::bad_alloc&)
+                 __catch (...)
                    {
                      return nullptr;
                    }

Reply via email to