libstdc++: Do not include <system_error> in concurrency headers
authorJonathan Wakely <jwakely@redhat.com>
Thu, 12 Jan 2023 13:03:01 +0000 (13:03 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 13 Jan 2023 00:15:01 +0000 (00:15 +0000)
The <condition_variable>, <mutex>, and <shared_mutex> headers use
std::errc constants, but don't use std::system_error itself. They only
use the __throw_system_error(int) function, which is defined in
<bits/functexcept.h>.

By including the header for the errc constants instead of the whole of
<system_error> we avoid depending on the whole std::string definition.

libstdc++-v3/ChangeLog:

* include/bits/std_mutex.h: Remove <system_error> include.
* include/std/condition_variable: Add <bits/error_constants.h>
include.
* include/std/mutex: Likewise.
* include/std/shared_mutex: Likewise.

libstdc++-v3/include/bits/std_mutex.h
libstdc++-v3/include/std/condition_variable
libstdc++-v3/include/std/mutex
libstdc++-v3/include/std/shared_mutex

index 68f5fb9..bc51535 100644 (file)
@@ -36,7 +36,6 @@
 # include <bits/c++0x_warning.h>
 #else
 
-#include <system_error>
 #include <bits/functexcept.h>
 #include <bits/gthr.h>
 
index b885e1b..f671fe4 100644 (file)
@@ -38,6 +38,7 @@
 #else
 
 #include <bits/chrono.h>
+#include <bits/error_constants.h>
 #include <bits/std_mutex.h>
 #include <bits/unique_lock.h>
 #include <bits/alloc_traits.h>
@@ -372,7 +373,7 @@ _GLIBCXX_BEGIN_INLINE_ABI_NAMESPACE(_V2)
         {
           return __p();
         }
+
       std::stop_callback __cb(__stoken, [this] { notify_all(); });
       shared_ptr<mutex> __mutex = _M_mutex;
       while (!__p())
index aca5f91..4eedbe5 100644 (file)
@@ -40,8 +40,8 @@
 #include <tuple>
 #include <exception>
 #include <type_traits>
-#include <system_error>
 #include <bits/chrono.h>
+#include <bits/error_constants.h>
 #include <bits/std_mutex.h>
 #include <bits/unique_lock.h>
 #if ! _GTHREAD_USE_MUTEX_TIMEDLOCK
index 7b70697..57c3cc5 100644 (file)
@@ -36,6 +36,7 @@
 #if __cplusplus >= 201402L
 
 #include <bits/chrono.h>
+#include <bits/error_constants.h>
 #include <bits/functexcept.h>
 #include <bits/move.h>        // move, __exchange
 #include <bits/std_mutex.h>   // defer_lock_t