]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix std::basic_stracktrace to not assume allocators throw std::bad_alloc
authorJonathan Wakely <jwakely@redhat.com>
Tue, 24 Sep 2024 11:44:09 +0000 (12:44 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 26 Sep 2024 11:38:40 +0000 (12:38 +0100)
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.

libstdc++-v3/include/std/stacktrace

index de7446064c7429e690e1101c46dd6884520b8ada..58d0c2a0fc22987c3d51429c5d65f7176cc226ad 100644 (file)
@@ -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;
                    }