[libcxx-commits] [libcxxabi] [libcxx] [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
Wed Nov 22 05:00:04 PST 2023


================
@@ -34,6 +56,37 @@ exception_ptr& exception_ptr::operator=(const exception_ptr& other) noexcept
     return *this;
 }
 
+#  if defined(_LIBCPP_EXCEPTION_PTR_DIRECT_INIT)
+void *exception_ptr::__init_native_exception(size_t size, type_info* tinfo, void (_LIBCXX_DTOR_FUNC* dest)(void*)) noexcept
+{
+    __cxa_exception *(*cxa_init_primary_exception_fn)(void*, std::type_info*, void(_LIBCXX_DTOR_FUNC*)(void*)) = __cxa_init_primary_exception;
----------------
itrofimow wrote:

For some reason i thought that i had to somehow employ `__attribute__((availability(...)))` and was really confused by that.
It took me longer than i'm willing to admit to realize that what you suggest is just a binary `HAS`/`HAS_NO` define.

I removed all the runtime-lookup related code and added a `_LIBCPP_AVAILABILITY_HAS[_NO]_INIT_PRIMARY_EXCEPTION` define into `__availability`.

https://github.com/llvm/llvm-project/pull/65534


More information about the libcxx-commits mailing list