[libcxx-commits] [PATCH] D155820: [libc++] Optimize internal function in <system_error>

Edo via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jul 20 13:55:50 PDT 2023


diamante0018 updated this revision to Diff 542661.
diamante0018 added a comment.

fix compilation when threads are disabled


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155820/new/

https://reviews.llvm.org/D155820

Files:
  libcxx/benchmarks/CMakeLists.txt
  libcxx/benchmarks/system_error.bench.cpp
  libcxx/src/system_error.cpp


Index: libcxx/src/system_error.cpp
===================================================================
--- libcxx/src/system_error.cpp
+++ libcxx/src/system_error.cpp
@@ -58,8 +58,8 @@
     return *this == code.category() && code.value() == condition;
 }
 
-#if !defined(_LIBCPP_HAS_NO_THREADS)
 namespace {
+#if !defined(_LIBCPP_HAS_NO_THREADS)
 
 //  GLIBC also uses 1024 as the maximum buffer size internally.
 constexpr size_t strerror_buff_size = 1024;
@@ -127,8 +127,16 @@
     return string(error_message);
 }
 #endif
+
+#endif // !defined(_LIBCPP_HAS_NO_THREADS)
+
+string make_error_str(const error_code& ec) {
+    if (ec) {
+        return ec.message();
+    }
+    return string();
+}
 } // end namespace
-#endif
 
 string
 __do_message::message(int ev) const
@@ -256,7 +264,7 @@
 }
 
 system_error::system_error(error_code ec)
-    : runtime_error(__init(ec, "")),
+    : runtime_error(make_error_str(ec)),
       __ec_(ec)
 {
 }
@@ -274,7 +282,7 @@
 }
 
 system_error::system_error(int ev, const error_category& ecat)
-    : runtime_error(__init(error_code(ev, ecat), "")),
+    : runtime_error(make_error_str(error_code(ev, ecat))),
       __ec_(error_code(ev, ecat))
 {
 }
Index: libcxx/benchmarks/system_error.bench.cpp
===================================================================
--- /dev/null
+++ libcxx/benchmarks/system_error.bench.cpp
@@ -0,0 +1,30 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <string>
+#include <system_error>
+
+#include "benchmark/benchmark.h"
+
+static void BM_SystemErrorWithMessage(benchmark::State& state) {
+  for (auto _ : state) {
+    std::error_code ec{};
+    benchmark::DoNotOptimize(std::system_error{ec, ""});
+  }
+}
+BENCHMARK(BM_SystemErrorWithMessage);
+
+static void BM_SystemErrorWithoutMessage(benchmark::State& state) {
+  for (auto _ : state) {
+    std::error_code ec{};
+    benchmark::DoNotOptimize(std::system_error{ec});
+  }
+}
+BENCHMARK(BM_SystemErrorWithoutMessage);
+
+BENCHMARK_MAIN();
Index: libcxx/benchmarks/CMakeLists.txt
===================================================================
--- libcxx/benchmarks/CMakeLists.txt
+++ libcxx/benchmarks/CMakeLists.txt
@@ -192,6 +192,7 @@
     std_format_spec_string_unicode.bench.cpp
     string.bench.cpp
     stringstream.bench.cpp
+    system_error.bench.cpp
     to_chars.bench.cpp
     unordered_set_operations.bench.cpp
     util_smartptr.bench.cpp


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D155820.542661.patch
Type: text/x-patch
Size: 2733 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20230720/95ab484e/attachment.bin>


More information about the libcxx-commits mailing list