Selectively import timespec_get into namespace std, since some C libraries don't have it. Reviewed as https://reviews.llvm.org/D50799
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@339816 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -334,6 +334,7 @@
|
|||||||
# define _LIBCPP_HAS_C11_FEATURES
|
# define _LIBCPP_HAS_C11_FEATURES
|
||||||
# elif defined(__Fuchsia__)
|
# elif defined(__Fuchsia__)
|
||||||
# define _LIBCPP_HAS_QUICK_EXIT
|
# define _LIBCPP_HAS_QUICK_EXIT
|
||||||
|
# define _LIBCPP_HAS_TIMESPEC_GET
|
||||||
# define _LIBCPP_HAS_C11_FEATURES
|
# define _LIBCPP_HAS_C11_FEATURES
|
||||||
# elif defined(__linux__)
|
# elif defined(__linux__)
|
||||||
# if !defined(_LIBCPP_HAS_MUSL_LIBC)
|
# if !defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
@@ -342,9 +343,11 @@
|
|||||||
# endif
|
# endif
|
||||||
# if _LIBCPP_GLIBC_PREREQ(2, 17)
|
# if _LIBCPP_GLIBC_PREREQ(2, 17)
|
||||||
# define _LIBCPP_HAS_C11_FEATURES
|
# define _LIBCPP_HAS_C11_FEATURES
|
||||||
|
# define _LIBCPP_HAS_TIMESPEC_GET
|
||||||
# endif
|
# endif
|
||||||
# else // defined(_LIBCPP_HAS_MUSL_LIBC)
|
# else // defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
# define _LIBCPP_HAS_QUICK_EXIT
|
# define _LIBCPP_HAS_QUICK_EXIT
|
||||||
|
# define _LIBCPP_HAS_TIMESPEC_GET
|
||||||
# define _LIBCPP_HAS_C11_FEATURES
|
# define _LIBCPP_HAS_C11_FEATURES
|
||||||
# endif
|
# endif
|
||||||
# endif // __linux__
|
# endif // __linux__
|
||||||
|
|||||||
@@ -151,11 +151,11 @@ using ::mbtowc;
|
|||||||
using ::wctomb;
|
using ::wctomb;
|
||||||
using ::mbstowcs;
|
using ::mbstowcs;
|
||||||
using ::wcstombs;
|
using ::wcstombs;
|
||||||
#ifdef _LIBCPP_HAS_QUICK_EXIT
|
#if !defined(_LIBCPP_CXX03_LANG) && defined(_LIBCPP_HAS_QUICK_EXIT)
|
||||||
using ::at_quick_exit;
|
using ::at_quick_exit;
|
||||||
using ::quick_exit;
|
using ::quick_exit;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _LIBCPP_HAS_C11_FEATURES
|
#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_C11_FEATURES)
|
||||||
using ::aligned_alloc;
|
using ::aligned_alloc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ using ::gmtime;
|
|||||||
using ::localtime;
|
using ::localtime;
|
||||||
#endif
|
#endif
|
||||||
using ::strftime;
|
using ::strftime;
|
||||||
#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_C11_FEATURES)
|
#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_TIMESPEC_GET)
|
||||||
using ::timespec_get;
|
using ::timespec_get;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ int main()
|
|||||||
static_assert((std::is_same<decltype(std::difftime(t,t)), double>::value), "");
|
static_assert((std::is_same<decltype(std::difftime(t,t)), double>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::mktime(&tm)), std::time_t>::value), "");
|
static_assert((std::is_same<decltype(std::mktime(&tm)), std::time_t>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::time(&t)), std::time_t>::value), "");
|
static_assert((std::is_same<decltype(std::time(&t)), std::time_t>::value), "");
|
||||||
#if TEST_STD_VER > 14 && defined(TEST_HAS_C11_FEATURES)
|
#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET)
|
||||||
static_assert((std::is_same<decltype(std::timespec_get(nullptr, 0)), int>::value), "");
|
static_assert((std::is_same<decltype(std::timespec_get(nullptr, 0)), int>::value), "");
|
||||||
#endif
|
#endif
|
||||||
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ int main()
|
|||||||
static_assert((std::is_same<decltype(std::difftime(t,t)), double>::value), "");
|
static_assert((std::is_same<decltype(std::difftime(t,t)), double>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::mktime(&tm)), std::time_t>::value), "");
|
static_assert((std::is_same<decltype(std::mktime(&tm)), std::time_t>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::time(&t)), std::time_t>::value), "");
|
static_assert((std::is_same<decltype(std::time(&t)), std::time_t>::value), "");
|
||||||
#if TEST_STD_VER > 14 && defined(TEST_HAS_C11_FEATURES)
|
#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET)
|
||||||
static_assert((std::is_same<decltype(std::timespec_get(nullptr, 0)), int>::value), "");
|
static_assert((std::is_same<decltype(std::timespec_get(nullptr, 0)), int>::value), "");
|
||||||
#endif
|
#endif
|
||||||
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
||||||
|
|||||||
@@ -124,22 +124,29 @@
|
|||||||
|
|
||||||
// Sniff out to see if the underling C library has C11 features
|
// Sniff out to see if the underling C library has C11 features
|
||||||
// Note that at this time (July 2018), MacOS X and iOS do NOT.
|
// Note that at this time (July 2018), MacOS X and iOS do NOT.
|
||||||
|
// This is cribbed from __config; but lives here as well because we can't assume libc++
|
||||||
#if __ISO_C_VISIBLE >= 2011 || TEST_STD_VER >= 11
|
#if __ISO_C_VISIBLE >= 2011 || TEST_STD_VER >= 11
|
||||||
# if defined(__FreeBSD__)
|
# if defined(__FreeBSD__)
|
||||||
|
// Specifically, FreeBSD does NOT have timespec_get, even though they have all
|
||||||
|
// the rest of C11 - this is PR#38495
|
||||||
# define TEST_HAS_C11_FEATURES
|
# define TEST_HAS_C11_FEATURES
|
||||||
# elif defined(__Fuchsia__)
|
# elif defined(__Fuchsia__)
|
||||||
# define TEST_HAS_C11_FEATURES
|
# define TEST_HAS_C11_FEATURES
|
||||||
|
# define TEST_HAS_TIMESPEC_GET
|
||||||
# elif defined(__linux__)
|
# elif defined(__linux__)
|
||||||
# if !defined(_LIBCPP_HAS_MUSL_LIBC)
|
# if !defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
# if _LIBCPP_GLIBC_PREREQ(2, 17)
|
# if _LIBCPP_GLIBC_PREREQ(2, 17)
|
||||||
|
# define TEST_HAS_TIMESPEC_GET
|
||||||
# define TEST_HAS_C11_FEATURES
|
# define TEST_HAS_C11_FEATURES
|
||||||
# endif
|
# endif
|
||||||
# else // defined(_LIBCPP_HAS_MUSL_LIBC)
|
# else // defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
# define TEST_HAS_C11_FEATURES
|
# define TEST_HAS_C11_FEATURES
|
||||||
|
# define TEST_HAS_TIMESPEC_GET
|
||||||
# endif
|
# endif
|
||||||
# elif defined(_WIN32)
|
# elif defined(_WIN32)
|
||||||
# if defined(_MSC_VER) && !defined(__MINGW32__)
|
# if defined(_MSC_VER) && !defined(__MINGW32__)
|
||||||
# define TEST_HAS_C11_FEATURES // Using Microsoft's C Runtime library
|
# define TEST_HAS_C11_FEATURES // Using Microsoft's C Runtime library
|
||||||
|
# define TEST_HAS_TIMESPEC_GET
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user