From 3fb2e045791eb6f003205902cdc4f74702770ec6 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Fri, 26 Jan 2024 16:03:20 +0100 Subject: [PATCH] Tentatively apply https://github.com/libcxxrt/libcxxrt/pull/27 This marks __cxa_allocate_exception, __cxa_free_exception and __cxa_init_primary_exception noexcept, to ensure compatibility with libc++'s declarations. PR: 276104 MFC after: 1 month --- contrib/libcxxrt/cxxabi.h | 6 +++--- contrib/libcxxrt/exception.cc | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contrib/libcxxrt/cxxabi.h b/contrib/libcxxrt/cxxabi.h index e021f85c905a..ef4076a08a0a 100644 --- a/contrib/libcxxrt/cxxabi.h +++ b/contrib/libcxxrt/cxxabi.h @@ -204,12 +204,12 @@ __cxa_eh_globals *__cxa_get_globals_fast(void); std::type_info * __cxa_current_exception_type(); -void *__cxa_allocate_exception(size_t thrown_size); +void *__cxa_allocate_exception(size_t thrown_size) throw(); -void __cxa_free_exception(void* thrown_exception); +void __cxa_free_exception(void* thrown_exception) throw(); __cxa_exception *__cxa_init_primary_exception( - void *object, std::type_info* tinfo, void (*dest)(void *)); + void *object, std::type_info* tinfo, void (*dest)(void *)) throw(); /** * Throws an exception returned by __cxa_current_primary_exception(). This diff --git a/contrib/libcxxrt/exception.cc b/contrib/libcxxrt/exception.cc index b1659c902f56..35ff997dd445 100644 --- a/contrib/libcxxrt/exception.cc +++ b/contrib/libcxxrt/exception.cc @@ -121,7 +121,7 @@ static inline _Unwind_Reason_Code continueUnwinding(struct _Unwind_Exception *ex } -extern "C" void __cxa_free_exception(void *thrown_exception); +extern "C" void __cxa_free_exception(void *thrown_exception) throw(); extern "C" void __cxa_free_dependent_exception(void *thrown_exception); extern "C" void* __dynamic_cast(const void *sub, const __class_type_info *src, @@ -611,7 +611,7 @@ static void free_exception(char *e) * emergency buffer if malloc() fails, and may block if there are no such * buffers available. */ -extern "C" void *__cxa_allocate_exception(size_t thrown_size) +extern "C" void *__cxa_allocate_exception(size_t thrown_size) throw() { size_t size = thrown_size + sizeof(__cxa_exception); char *buffer = alloc_or_die(size); @@ -633,7 +633,7 @@ extern "C" void *__cxa_allocate_dependent_exception(void) * In this implementation, it is also called by __cxa_end_catch() and during * thread cleanup. */ -extern "C" void __cxa_free_exception(void *thrown_exception) +extern "C" void __cxa_free_exception(void *thrown_exception) throw() { __cxa_exception *ex = reinterpret_cast<__cxa_exception*>(thrown_exception) - 1; // Free the object that was thrown, calling its destructor @@ -794,7 +794,7 @@ static void throw_exception(__cxa_exception *ex) } extern "C" __cxa_exception *__cxa_init_primary_exception( - void *object, std::type_info* tinfo, void (*dest)(void *)) { + void *object, std::type_info* tinfo, void (*dest)(void *)) throw() { __cxa_exception *ex = reinterpret_cast<__cxa_exception*>(object) - 1; ex->referenceCount = 0;