[libcxx-commits] [libcxxabi] [libc++abi] Fix test failures with GCC 14 (PR #95759)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jun 17 02:30:02 PDT 2024
https://github.com/philnik777 created https://github.com/llvm/llvm-project/pull/95759
This adds a new `__cxa_call_terminate`, which GCC 14 generates calls to now. Clang had `__clang_call_terminate` for the same use-case for a long time. It also fixes a test that is enabled now, since GCC has the `__has_feature` FTM now.
>From caee021c084d9e8fb33c19225e9c3e1ce910c998 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Mon, 17 Jun 2024 11:27:56 +0200
Subject: [PATCH] [libc++abi] Fix test failures with GCC 14
---
libcxxabi/include/cxxabi.h | 3 +++
libcxxabi/src/cxa_exception.cpp | 5 ++++
.../test/catch_const_pointer_nullptr.pass.cpp | 25 +++----------------
3 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/libcxxabi/include/cxxabi.h b/libcxxabi/include/cxxabi.h
index 0e3969084e04f..9628ca737e6e1 100644
--- a/libcxxabi/include/cxxabi.h
+++ b/libcxxabi/include/cxxabi.h
@@ -77,6 +77,9 @@ extern _LIBCXXABI_FUNC_VIS void __cxa_end_cleanup();
#endif
extern _LIBCXXABI_FUNC_VIS std::type_info *__cxa_current_exception_type();
+// GNU extension
+extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_call_terminate(void*) throw();
+
// 2.5.4 Rethrowing Exceptions
extern _LIBCXXABI_FUNC_VIS _LIBCXXABI_NORETURN void __cxa_rethrow();
diff --git a/libcxxabi/src/cxa_exception.cpp b/libcxxabi/src/cxa_exception.cpp
index ff69a4c65e465..014e6e8ac8420 100644
--- a/libcxxabi/src/cxa_exception.cpp
+++ b/libcxxabi/src/cxa_exception.cpp
@@ -589,6 +589,11 @@ void __cxa_end_catch() {
}
}
+void __cxa_call_terminate(void* unwind_arg) throw() {
+ __cxa_begin_catch(unwind_arg);
+ std::terminate();
+}
+
// Note: exception_header may be masquerading as a __cxa_dependent_exception
// and that's ok. exceptionType is there too.
// However watch out for foreign exceptions. Return null for them.
diff --git a/libcxxabi/test/catch_const_pointer_nullptr.pass.cpp b/libcxxabi/test/catch_const_pointer_nullptr.pass.cpp
index a0d1f36f050f0..a66e6c9e53075 100644
--- a/libcxxabi/test/catch_const_pointer_nullptr.pass.cpp
+++ b/libcxxabi/test/catch_const_pointer_nullptr.pass.cpp
@@ -8,16 +8,11 @@
// UNSUPPORTED: no-exceptions
-#include <cassert>
-
-// Clang emits warnings about exceptions of type 'Child' being caught by
-// an earlier handler of type 'Base'. Congrats clang, you've just
-// diagnosed the behavior under test.
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wexceptions"
-#endif
+// Clang and GCC emit warnings about exceptions of type 'Child' being caught by
+// an earlier handler of type 'Base'.
+// ADDITIONAL_COMPILE_FLAGS: -Wno-exceptions
-#if __has_feature(cxx_nullptr)
+#include <cassert>
struct A {};
@@ -124,18 +119,6 @@ void test6()
}
}
-
-#else
-
-void test1() {}
-void test2() {}
-void test3() {}
-void test4() {}
-void test5() {}
-void test6() {}
-
-#endif
-
int main(int, char**) {
test1();
test2();
More information about the libcxx-commits
mailing list