git: 3f37aa84be74 - stable/14 - Tentatively apply https://github.com/libcxxrt/libcxxrt/pull/27

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 20 Apr 2024 10:32:25 UTC
The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=3f37aa84be749be0963b388a02cdc58b4f1c7246

commit 3f37aa84be749be0963b388a02cdc58b4f1c7246
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-01-26 15:03:20 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-04-19 21:14:14 +0000

    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
    
    (cherry picked from commit 3fb2e045791eb6f003205902cdc4f74702770ec6)
---
 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;