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.
This commit is contained in:
Jonathan Wakely 2025-10-15 12:52:27 +01:00 committed by Jonathan Wakely
parent f81e712120
commit 524bca2e33
No known key found for this signature in database
2 changed files with 5 additions and 4 deletions

View File

@ -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

View File

@ -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