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; }