re PR libstdc++/55741 (bootstrap fails in libstdc++-v3/src/c++11/thread.cc)

PR libstdc++/55741
	* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Check for Sleep.
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* src/c++11/thread.cc (__sleep_for): Use Sleep if available.

From-SVN: r194635
This commit is contained in:
Jonathan Wakely 2012-12-20 14:36:56 +00:00 committed by Jonathan Wakely
parent d5ae0ba663
commit 8ed812cc4b
5 changed files with 61 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2012-12-20 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/55741
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Check for Sleep.
* config.h.in: Regenerate.
* configure: Regenerate.
* src/c++11/thread.cc (__sleep_for): Use Sleep if available.
2012-12-18 Jonathan Wakely <jwakely.gcc@gmail.com>
* doc/xml/manual/abi.xml: Update URLs for C++ ABI.

View File

@ -1301,6 +1301,17 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
AC_MSG_RESULT($ac_has_usleep)
fi
if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
AC_MSG_CHECKING([for Sleep])
AC_TRY_COMPILE([#include <windows.h>],
[Sleep(1)],
[ac_has_win32_sleep=yes],[ac_has_win32_sleep=no])
if test x"$ac_has_win32_sleep" = x"yes"; then
AC_DEFINE(HAVE_WIN32_SLEEP,1, [Defined if Sleep exists.])
fi
AC_MSG_RESULT($ac_has_win32_sleep)
fi
AC_SUBST(GLIBCXX_LIBS)
CXXFLAGS="$ac_save_CXXFLAGS"

View File

@ -460,6 +460,9 @@
/* Define to 1 if you have the <wctype.h> header file. */
#undef HAVE_WCTYPE_H
/* Defined if Sleep exists. */
#undef HAVE_WIN32_SLEEP
/* Define if writev is available in <sys/uio.h>. */
#undef HAVE_WRITEV

View File

@ -19900,6 +19900,35 @@ $as_echo "#define HAVE_USLEEP 1" >>confdefs.h
$as_echo "$ac_has_usleep" >&6; }
fi
if test x"$ac_has_nanosleep$ac_has_sleep" = x"nono"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sleep" >&5
$as_echo_n "checking for Sleep... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <windows.h>
int
main ()
{
Sleep(1)
;
return 0;
}
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"; then :
ac_has_win32_sleep=yes
else
ac_has_win32_sleep=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
if test x"$ac_has_win32_sleep" = x"yes"; then
$as_echo "#define HAVE_WIN32_SLEEP 1" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_win32_sleep" >&5
$as_echo "$ac_has_win32_sleep" >&6; }
fi
CXXFLAGS="$ac_save_CXXFLAGS"

View File

@ -61,6 +61,8 @@ static inline int get_nprocs()
#ifndef _GLIBCXX_USE_NANOSLEEP
# ifdef _GLIBCXX_HAVE_SLEEP
# include <unistd.h>
# elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
# include <windows.h>
# else
# error "No sleep function known for this target"
# endif
@ -170,9 +172,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_cast<long>(__ns.count())
};
::nanosleep(&__ts, 0);
#else
# ifdef _GLIBCXX_HAVE_SLEEP
# ifdef _GLIBCXX_HAVE_USLEEP
#elif defined(_GLIBCXX_HAVE_SLEEP)
# ifdef _GLIBCXX_HAVE_USLEEP
::sleep(__s.count());
if (__ns.count() > 0)
{
@ -181,10 +182,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__us = 1;
::usleep(__us);
}
# else
# else
::sleep(__s.count() + (__ns >= 1000000));
# endif
# endif
#elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
unsigned long ms = __ns.count() / 1000000;
if (__ns.count() > 0 && ms == 0)
ms = 1;
::Sleep(chrono::milliseconds(__s).count() + ms);
#endif
}