[libcxx-commits] [PATCH] D125268: [libc++abi][NFC] Refactor exception type demangling into a separate function

Louis Dionne via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Mon May 9 14:15:55 PDT 2022


ldionne created this revision.
Herald added a project: All.
ldionne requested review of this revision.
Herald added a project: libc++abi.
Herald added a subscriber: libcxx-commits.
Herald added a reviewer: libc++abi.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D125268

Files:
  libcxxabi/src/cxa_default_handlers.cpp


Index: libcxxabi/src/cxa_default_handlers.cpp
===================================================================
--- libcxxabi/src/cxa_default_handlers.cpp
+++ libcxxabi/src/cxa_default_handlers.cpp
@@ -22,6 +22,22 @@
 
 static constinit const char* cause = "uncaught";
 
+template <size_t N>
+_LIBCXXABI_HIDDEN
+char const* demangle(char const* str, char (&buf)[N]) {
+#if !defined(LIBCXXABI_NON_DEMANGLING_TERMINATE)
+    int status;
+    size_t len = sizeof(buf);
+    const char* result = __cxxabiv1::__cxa_demangle(str, buf, &len, &status);
+    if (status != 0)
+        return str;
+    else
+        return result;
+#else
+    return str;
+#endif
+}
+
 __attribute__((noreturn))
 static void demangling_terminate_handler()
 {
@@ -45,17 +61,8 @@
                         exception_header + 1;
                 const __shim_type_info* thrown_type =
                     static_cast<const __shim_type_info*>(exception_header->exceptionType);
-#if !defined(LIBCXXABI_NON_DEMANGLING_TERMINATE)
-                // Try to get demangled name of thrown_type
-                int status;
                 char buf[1024];
-                size_t len = sizeof(buf);
-                const char* name = __cxa_demangle(thrown_type->name(), buf, &len, &status);
-                if (status != 0)
-                    name = thrown_type->name();
-#else
-                const char* name = thrown_type->name();
-#endif
+                char const* name = demangle(thrown_type->name(), buf);
                 // If the uncaught exception can be caught with std::exception&
                 const __shim_type_info* catch_type =
                     static_cast<const __shim_type_info*>(&typeid(std::exception));


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125268.428203.patch
Type: text/x-patch
Size: 1703 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220509/cfedb687/attachment.bin>


More information about the libcxx-commits mailing list