https://gcc.gnu.org/g:524bca2e33b56077b1ffe9e7526857afdbccce16

commit r16-4449-g524bca2e33b56077b1ffe9e7526857afdbccce16
Author: Jonathan Wakely <[email protected]>
Date:   Wed Oct 15 12:52:27 2025 +0100

    libstdc++: Fix missing __to_timeout_timespec for targets using POSIX sleep 
[PR122293]
    
    The preprocessor condition for defining the new __to_timeout_timespec
    function templates did not match all the conditions under which it's
    needed.
    
    std::this_thread::sleep_for is defined #if ! defined _GLIBCXX_NO_SLEEP
    but it relies on __to_timeout_timespec which was only being defined for
    targets that use nanosleep, or clock_gettime, or use gthreads.
    
    For a non-gthreads target that uses POSIX sleep to implement
    std::this_thread::sleep_for, the build fails with:
    
    include/bits/this_thread_sleep.h:71:40: error: '__to_timeout_timespec' is 
not a member of 'std::chrono' [-Wtemplate-body]
       71 |         struct timespec __ts = 
chrono::__to_timeout_timespec(__rtime);
          |                                        ^~~~~~~~~~~~~~~~~~~~~
    
    Presumably the same would happen for mingw-w64 if configured with
    --disable-threads (as that would be a non-gthreads target that doesn't
    use nanosleep or clock_gettime).
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/122293
            * include/bits/chrono.h (__to_timeout_timespec): Fix
            preprocessor condition to match the conditions under which
            callers of this function are defined.
            * include/bits/this_thread_sleep.h: Remove unused include.

Diff:
---
 libstdc++-v3/include/bits/chrono.h            | 8 +++++---
 libstdc++-v3/include/bits/this_thread_sleep.h | 1 -
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/include/bits/chrono.h 
b/libstdc++-v3/include/bits/chrono.h
index 7f505aa0f0ff..4dc399855165 100644
--- a/libstdc++-v3/include/bits/chrono.h
+++ b/libstdc++-v3/include/bits/chrono.h
@@ -1515,8 +1515,9 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
   } // namespace filesystem
 #endif // C++17 && HOSTED
 
-#if defined _GLIBCXX_USE_NANOSLEEP || defined _GLIBCXX_USE_CLOCK_REALTIME \
-    || defined _GLIBCXX_HAS_GTHREADS
+#if _GLIBCXX_HOSTED
+#if ! defined _GLIBCXX_NO_SLEEP || defined _GLIBCXX_HAS_GTHREADS \
+    || _GLIBCXX_HAVE_LINUX_FUTEX
 namespace chrono
 {
 /// @cond undocumented
@@ -1585,7 +1586,8 @@ namespace chrono
 
 /// @endcond
 } // namespace chrono
-#endif // USE_NANOSLEEP || USE_CLOCK_REALTIME || HAS_GTHREADS
+#endif // !NO_SLEEP || HAS_GTHREADS || HAVE_LINUX_FUTEX
+#endif // HOSTED
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std
diff --git a/libstdc++-v3/include/bits/this_thread_sleep.h 
b/libstdc++-v3/include/bits/this_thread_sleep.h
index 01f25dda2af0..7c9d573d86d8 100644
--- a/libstdc++-v3/include/bits/this_thread_sleep.h
+++ b/libstdc++-v3/include/bits/this_thread_sleep.h
@@ -36,7 +36,6 @@
 
 #if __cplusplus >= 201103L
 #include <bits/chrono.h> // std::chrono::*
-#include <ext/numeric_traits.h> // __int_traits
 
 #ifdef _GLIBCXX_USE_NANOSLEEP
 # include <cerrno>  // errno, EINTR

Reply via email to