[libcxx-commits] [libunwind] [libcxx] [libcxxabi] [llvm] [lld] [flang] [clang] [clang-tools-extra] [libc] [compiler-rt] [libclc] [libc++] [libc++abi] Initialize exception directly in make_exception_ptr if __cxa_init_primary_exception is available in ABI-library (PR #65534)
via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jan 15 13:16:59 PST 2024
================
@@ -9,23 +9,57 @@
#ifndef _LIBCPP___EXCEPTION_EXCEPTION_PTR_H
#define _LIBCPP___EXCEPTION_EXCEPTION_PTR_H
+#include <__availability>
#include <__config>
#include <__exception/operations.h>
#include <__memory/addressof.h>
+#include <__memory/construct_at.h>
+#include <__type_traits/decay.h>
+#include <__utility/unreachable.h>
#include <cstddef>
#include <cstdlib>
+#include <new>
+#include <typeinfo>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
+#ifndef _LIBCPP_ABI_MICROSOFT
+
+namespace __cxxabiv1 {
+
+extern "C" {
+_LIBCPP_OVERRIDABLE_FUNC_VIS void* __cxa_allocate_exception(size_t) throw();
+_LIBCPP_OVERRIDABLE_FUNC_VIS void __cxa_free_exception(void*) throw();
+
+struct __cxa_exception;
+_LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception(
+ void*,
+ std::type_info*,
+ void(
+# if defined(_WIN32)
+ __thiscall
----------------
itrofimow wrote:
MinGW requires this: https://buildkite.com/llvm-project/libcxx-ci/builds/32388#018c84de-f231-43b4-839a-c9fe88f118fe/311-1557
This is how `__cxa_throw` (and `__cxa_init_primary_exception` as well) is defined: https://github.com/llvm/llvm-project/blob/2bb2a42fa261d728e32ba0b1f9cf27ba7991440f/libcxxabi/include/cxxabi.h#L48-L55
and `_LIBCXXABI_DTOR_FUNC` expands to `__thiscall` under win32: https://github.com/llvm/llvm-project/blob/2bb2a42fa261d728e32ba0b1f9cf27ba7991440f/libcxxabi/include/__cxxabi_config.h#L100-L101
https://github.com/llvm/llvm-project/pull/65534
More information about the libcxx-commits
mailing list