Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 27, 2023

Conversation

mysterymath
Copy link
Contributor

@mysterymath mysterymath commented Sep 26, 2023

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.

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.
@mysterymath mysterymath requested a review from a team as a code owner September 26, 2023 23:59
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Sep 26, 2023
@llvmbot
Copy link
Member

llvmbot commented Sep 27, 2023

@llvm/pr-subscribers-libcxx

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/67504.diff

1 Files Affected:

  • (modified) libcxx/src/system_error.cpp (+10-2)
diff --git a/libcxx/src/system_error.cpp b/libcxx/src/system_error.cpp
index f187090f75b6ce9..5b6601bad78531d 100644
--- a/libcxx/src/system_error.cpp
+++ b/libcxx/src/system_error.cpp
@@ -266,8 +266,16 @@ 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

@ldionne ldionne merged commit 07d08f4 into llvm:main Sep 27, 2023
legrosbuffle pushed a commit to legrosbuffle/llvm-project that referenced this pull request Sep 29, 2023
…led (llvm#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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants