--- a/libcxx/include/thread +++ b/libcxx/include/thread @@ -435,7 +435,12 @@ sleep_for(const chrono::duration<_Rep, _Period>& __d) using namespace chrono; if (__d > duration<_Rep, _Period>::zero()) { +#if ! (defined(_LIBCPP_COMPILER_GCC) && (__powerpc__ || __POWERPC__)) + // GCC's long double const folding is incomplete for IBM128 long doubles. _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max(); +#else + _LIBCPP_CONSTEXPR duration<long double> _Max = duration<long double>(ULLONG_MAX/1000000000ULL) ; +#endif nanoseconds __ns; if (__d < _Max) {