[libcxx-commits] [libcxx] 07d08f4 - [libc++] Don't add reference to system_category when exceptions disabled (#67504)

via libcxx-commits libcxx-commits at lists.llvm.org
Wed Sep 27 06:09:47 PDT 2023


Author: Daniel Thornburgh
Date: 2023-09-27T09:09:43-04:00
New Revision: 07d08f4eb44e09e888c0773d87872570048e02ac

URL: https://github.com/llvm/llvm-project/commit/07d08f4eb44e09e888c0773d87872570048e02ac
DIFF: https://github.com/llvm/llvm-project/commit/07d08f4eb44e09e888c0773d87872570048e02ac.diff

LOG: [libc++] Don't add reference to system_category when exceptions disabled (#67504)

This fixes a size regression in Fuchsia when building a static libc++
multilib with exceptions disabled. Referring to `system_category` in
`__throw_system_error` brings in a relatively large amount of additional
exception classes into the link without substantially improving the
error message.

Added: 
    

Modified: 
    libcxx/src/system_error.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/src/system_error.cpp b/libcxx/src/system_error.cpp
index f187090f75b6ce9..1cc6b7d7e1e6307 100644
--- a/libcxx/src/system_error.cpp
+++ b/libcxx/src/system_error.cpp
@@ -266,8 +266,15 @@ system_error::~system_error() noexcept
 {
 }
 
-void __throw_system_error(int ev, const char* what_arg) {
-  std::__throw_system_error(error_code(ev, system_category()), what_arg);
+void
+__throw_system_error(int ev, const char* what_arg)
+{
+#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
+    std::__throw_system_error(error_code(ev, system_category()), what_arg);
+#else
+    // The above could also handle the no-exception case, but for size, avoid referencing system_category() unnecessarily.
+    _LIBCPP_VERBOSE_ABORT("system_error was thrown in -fno-exceptions mode with error %i and message \"%s\"", ev, what_arg);
+#endif
 }
 
 _LIBCPP_END_NAMESPACE_STD


        


More information about the libcxx-commits mailing list