diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8186974196e..932b80716ba 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,13 @@ 2019-02-14 Jonathan Wakely + * configure.ac: Check for C11 timespec_get function. + * crossconfig.m4 (freebsd, linux, gnu, cygwin, solaris, netbsd) + (openbsd): Likewise + * config.h.in: Regenerate. + * configure: Regenerate. + * include/c_global/ctime (timespec, timespec_get): Add to namespace + std for C++17 and up. + * doc/xml/manual/intro.xml: Document LWG 2537 status. * include/bits/stl_queue.h (priority_queue(const Compare&, const Container&, const Alloc&)) diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 225ef1bff9f..034d91b3a5f 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -508,6 +508,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_TGMATH_H +/* Define to 1 if you have the `timespec_get' function. */ +#undef HAVE_TIMESPEC_GET + /* Define to 1 if the target supports thread-local storage. */ #undef HAVE_TLS diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 15848e364ab..857f886571e 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -28428,6 +28428,19 @@ if test "x$ac_cv_func__wfopen" = xyes; then : #define HAVE__WFOPEN 1 _ACEOF +fi +done + + + # C11 functions for C++17 library + for ac_func in timespec_get +do : + ac_fn_c_check_func "$LINENO" "timespec_get" "ac_cv_func_timespec_get" +if test "x$ac_cv_func_timespec_get" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIMESPEC_GET 1 +_ACEOF + fi done @@ -53613,6 +53626,17 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then : #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done + + for ac_func in timespec_get +do : + ac_fn_c_check_func "$LINENO" "timespec_get" "ac_cv_func_timespec_get" +if test "x$ac_cv_func_timespec_get" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIMESPEC_GET 1 +_ACEOF + fi done @@ -60232,6 +60256,17 @@ _ACEOF fi done + for ac_func in timespec_get +do : + ac_fn_c_check_func "$LINENO" "timespec_get" "ac_cv_func_timespec_get" +if test "x$ac_cv_func_timespec_get" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIMESPEC_GET 1 +_ACEOF + +fi +done + @@ -66542,6 +66577,17 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then : #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done + + for ac_func in timespec_get +do : + ac_fn_c_check_func "$LINENO" "timespec_get" "ac_cv_func_timespec_get" +if test "x$ac_cv_func_timespec_get" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TIMESPEC_GET 1 +_ACEOF + fi done diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index ad5b4117cfd..6c98f270441 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -265,6 +265,9 @@ if $GLIBCXX_IS_NATIVE; then AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) AC_CHECK_FUNCS(_wfopen) + # C11 functions for C++17 library + AC_CHECK_FUNCS(timespec_get) + # For iconv support. AM_ICONV diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4 index 3de40dc138b..4a303008053 100644 --- a/libstdc++-v3/crossconfig.m4 +++ b/libstdc++-v3/crossconfig.m4 @@ -135,6 +135,7 @@ case "${host}" in fi AC_CHECK_FUNCS(__cxa_thread_atexit) AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) + AC_CHECK_FUNCS(timespec_get) ;; *-fuchsia*) @@ -194,6 +195,7 @@ case "${host}" in GCC_CHECK_TLS AC_CHECK_FUNCS(__cxa_thread_atexit_impl) AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) + AC_CHECK_FUNCS(timespec_get) AM_ICONV ;; *-mingw32*) @@ -221,6 +223,7 @@ case "${host}" in AC_DEFINE(HAVE_ISNANL) fi AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) + AC_CHECK_FUNCS(timespec_get) ;; *-qnx6.1* | *-qnx6.2*) SECTION_FLAGS='-ffunction-sections -fdata-sections' diff --git a/libstdc++-v3/include/c_global/ctime b/libstdc++-v3/include/c_global/ctime index cdd3d8d7171..685c821b577 100644 --- a/libstdc++-v3/include/c_global/ctime +++ b/libstdc++-v3/include/c_global/ctime @@ -72,4 +72,13 @@ namespace std using ::strftime; } // namespace +#if __cplusplus >= 201703L && defined(_GLIBCXX_HAVE_TIMESPEC_GET) +#undef timespec_get +namespace std +{ + using ::timespec; + using ::timespec_get; +} // namespace std +#endif + #endif