diff --git a/libcxx/include/__config b/libcxx/include/__config --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -294,9 +294,6 @@ # define _LIBCPP_HAS_BITSCAN64 # endif # define _LIBCPP_HAS_OPEN_WITH_WCHAR -# if defined(_LIBCPP_MSVCRT) -# define _LIBCPP_HAS_QUICK_EXIT -# endif // Some CRT APIs are unavailable to store apps # if defined(WINAPI_FAMILY) @@ -354,61 +351,6 @@ # define _LIBCPP_NO_CFI #endif -#if (defined(__ISO_C_VISIBLE) && (__ISO_C_VISIBLE >= 2011)) || __cplusplus >= 201103L -# if defined(__FreeBSD__) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_QUICK_EXIT -# if __FreeBSD_version >= 1300064 || \ - (__FreeBSD_version >= 1201504 && __FreeBSD_version < 1300000) -# define _LIBCPP_HAS_TIMESPEC_GET -# endif -# elif defined(__BIONIC__) -# if __ANDROID_API__ >= 21 -# define _LIBCPP_HAS_QUICK_EXIT -# endif -# if __ANDROID_API__ >= 28 -# define _LIBCPP_HAS_ALIGNED_ALLOC -# endif -# if __ANDROID_API__ >= 29 -# define _LIBCPP_HAS_TIMESPEC_GET -# endif -# elif defined(__Fuchsia__) || defined(__wasi__) || defined(__NetBSD__) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_QUICK_EXIT -# define _LIBCPP_HAS_TIMESPEC_GET -# elif defined(__OpenBSD__) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_TIMESPEC_GET -# elif defined(__linux__) -# if !defined(_LIBCPP_HAS_MUSL_LIBC) -# if _LIBCPP_GLIBC_PREREQ(2, 15) || defined(__BIONIC__) -# define _LIBCPP_HAS_QUICK_EXIT -# endif -# if _LIBCPP_GLIBC_PREREQ(2, 17) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_TIMESPEC_GET -# endif -# else // defined(_LIBCPP_HAS_MUSL_LIBC) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_QUICK_EXIT -# define _LIBCPP_HAS_TIMESPEC_GET -# endif -# elif defined(_LIBCPP_MSVCRT) - // Using Microsoft's C Runtime library, not MinGW -# define _LIBCPP_HAS_TIMESPEC_GET -# elif defined(__APPLE__) - // timespec_get and aligned_alloc were introduced in macOS 10.15 and - // aligned releases -# if ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 130000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 130000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 60000)) -# define _LIBCPP_HAS_ALIGNED_ALLOC -# define _LIBCPP_HAS_TIMESPEC_GET -# endif -# endif // __APPLE__ -#endif - #ifndef _LIBCPP_CXX03_LANG # define _LIBCPP_ALIGNOF(_Tp) alignof(_Tp) #elif defined(_LIBCPP_COMPILER_CLANG_BASED) diff --git a/libcxx/include/cstdlib b/libcxx/include/cstdlib --- a/libcxx/include/cstdlib +++ b/libcxx/include/cstdlib @@ -150,11 +150,11 @@ using ::wctomb _LIBCPP_USING_IF_EXISTS; using ::mbstowcs _LIBCPP_USING_IF_EXISTS; using ::wcstombs _LIBCPP_USING_IF_EXISTS; -#if !defined(_LIBCPP_CXX03_LANG) && defined(_LIBCPP_HAS_QUICK_EXIT) +#if !defined(_LIBCPP_CXX03_LANG) using ::at_quick_exit _LIBCPP_USING_IF_EXISTS; using ::quick_exit _LIBCPP_USING_IF_EXISTS; #endif -#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_ALIGNED_ALLOC) +#if _LIBCPP_STD_VER > 14 using ::aligned_alloc _LIBCPP_USING_IF_EXISTS; #endif diff --git a/libcxx/include/ctime b/libcxx/include/ctime --- a/libcxx/include/ctime +++ b/libcxx/include/ctime @@ -52,27 +52,13 @@ #pragma GCC system_header #endif -// FIXME: -// Apple SDKs don't define ::timespec_get unconditionally in C++ mode. This -// should be fixed in future SDKs, but for the time being we need to avoid -// trying to use that declaration when the SDK doesn't provide it. Note that -// we're detecting this here instead of in <__config> because we can't include -// system headers from <__config>, since it leads to circular module dependencies. -// This is also meant to be a very temporary workaround until the SDKs are fixed. -#if defined(__APPLE__) -# include -# if defined(_LIBCPP_HAS_TIMESPEC_GET) && (__DARWIN_C_LEVEL < __DARWIN_C_FULL) -# define _LIBCPP_HAS_TIMESPEC_GET_NOT_ACTUALLY_PROVIDED -# endif -#endif - _LIBCPP_BEGIN_NAMESPACE_STD using ::clock_t _LIBCPP_USING_IF_EXISTS; using ::size_t _LIBCPP_USING_IF_EXISTS; using ::time_t _LIBCPP_USING_IF_EXISTS; using ::tm _LIBCPP_USING_IF_EXISTS; -#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_TIMESPEC_GET) +#if _LIBCPP_STD_VER > 14 using ::timespec _LIBCPP_USING_IF_EXISTS; #endif using ::clock _LIBCPP_USING_IF_EXISTS; @@ -86,7 +72,7 @@ using ::localtime _LIBCPP_USING_IF_EXISTS; #endif using ::strftime _LIBCPP_USING_IF_EXISTS; -#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_TIMESPEC_GET) && !defined(_LIBCPP_HAS_TIMESPEC_GET_NOT_ACTUALLY_PROVIDED) +#if _LIBCPP_STD_VER > 14 using ::timespec_get _LIBCPP_USING_IF_EXISTS; #endif diff --git a/libcxx/test/libcxx/language.support/has_aligned_alloc.compile.pass.cpp b/libcxx/test/libcxx/language.support/has_aligned_alloc.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/language.support/has_aligned_alloc.compile.pass.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++03, c++11, c++14 - -// Make sure TEST_HAS_ALIGNED_ALLOC (defined by the test suite) and -// _LIBCPP_HAS_ALIGNED_ALLOC (defined by libc++) stay in sync. - -#include <__config> -#include "test_macros.h" - -#if defined(TEST_HAS_ALIGNED_ALLOC) != defined(_LIBCPP_HAS_ALIGNED_ALLOC) -# error "TEST_HAS_ALIGNED_ALLOC and _LIBCPP_HAS_ALIGNED_ALLOC are out of sync" -#endif diff --git a/libcxx/test/libcxx/language.support/has_quick_exit.compile.pass.cpp b/libcxx/test/libcxx/language.support/has_quick_exit.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/language.support/has_quick_exit.compile.pass.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++03, c++11, c++14 - -// Make sure TEST_HAS_QUICK_EXIT (defined by the test suite) and -// _LIBCPP_HAS_QUICK_EXIT (defined by libc++) stay in sync. - -#include <__config> -#include "test_macros.h" - -#if defined(TEST_HAS_QUICK_EXIT) != defined(_LIBCPP_HAS_QUICK_EXIT) -# error "TEST_HAS_QUICK_EXIT and _LIBCPP_HAS_QUICK_EXIT are out of sync" -#endif diff --git a/libcxx/test/libcxx/language.support/has_timespec_get.compile.pass.cpp b/libcxx/test/libcxx/language.support/has_timespec_get.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/language.support/has_timespec_get.compile.pass.cpp +++ /dev/null @@ -1,19 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++03, c++11, c++14 - -// Make sure TEST_HAS_TIMESPEC_GET (defined by the test suite) and -// _LIBCPP_HAS_TIMESPEC_GET (defined by libc++) stay in sync. - -#include <__config> -#include "test_macros.h" - -#if defined(TEST_HAS_TIMESPEC_GET) != defined(_LIBCPP_HAS_TIMESPEC_GET) -# error "TEST_HAS_TIMESPEC_GET and _LIBCPP_HAS_TIMESPEC_GET are out of sync" -#endif diff --git a/libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp --- a/libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp +++ b/libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp @@ -8,6 +8,10 @@ // test +// ::aligned_alloc is provided by the C library, but it's marked as unavailable +// until macOS 10.15 +// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14}} + #include #include #include @@ -132,9 +136,8 @@ static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#if TEST_STD_VER > 14 && defined(TEST_HAS_ALIGNED_ALLOC) - static_assert((std::is_same::value), - ""); +#if TEST_STD_VER > 14 + static_assert((std::is_same::value), ""); #endif void* pv = 0; diff --git a/libcxx/test/std/language.support/support.runtime/cstdlib.pass.cpp b/libcxx/test/std/language.support/support.runtime/cstdlib.pass.cpp --- a/libcxx/test/std/language.support/support.runtime/cstdlib.pass.cpp +++ b/libcxx/test/std/language.support/support.runtime/cstdlib.pass.cpp @@ -8,6 +8,10 @@ // test +// ::aligned_alloc is provided by the C library, but it's marked as unavailable +// until macOS 10.15 +// XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12|13|14}} + #include #include #include @@ -119,9 +123,8 @@ static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#if TEST_STD_VER > 14 && defined(TEST_HAS_ALIGNED_ALLOC) - static_assert( - (std::is_same::value), ""); +#if TEST_STD_VER > 14 + static_assert((std::is_same::value), ""); #endif void* pv = 0; diff --git a/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp b/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp --- a/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp +++ b/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp @@ -20,7 +20,7 @@ #error CLOCKS_PER_SEC not defined #endif -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 #ifndef TIME_UTC #error TIME_UTC not defined #endif @@ -32,7 +32,7 @@ std::size_t s = 0; std::time_t t = 0; std::tm tm = {}; -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 std::timespec tmspec = {}; ((void)tmspec); // Prevent unused warning #endif @@ -44,7 +44,7 @@ static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 static_assert((std::is_same::value), ""); #endif #ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS diff --git a/libcxx/test/std/language.support/support.start.term/at_quick_exit.compile.fail.cpp b/libcxx/test/std/language.support/support.start.term/at_quick_exit.compile.fail.cpp deleted file mode 100644 --- a/libcxx/test/std/language.support/support.start.term/at_quick_exit.compile.fail.cpp +++ /dev/null @@ -1,27 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++03 - -// test that referencing at_quick_exit when TEST_HAS_QUICK_EXIT is not defined -// results in a compile error. - -#include - -#include "test_macros.h" - -void f() { } - -int main(int, char**) { -#if !defined(TEST_HAS_QUICK_EXIT) - std::at_quick_exit(f); -#else -# error -#endif - return 0; -} diff --git a/libcxx/test/std/language.support/support.start.term/quick_exit.compile.fail.cpp b/libcxx/test/std/language.support/support.start.term/quick_exit.compile.fail.cpp deleted file mode 100644 --- a/libcxx/test/std/language.support/support.start.term/quick_exit.compile.fail.cpp +++ /dev/null @@ -1,25 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -// UNSUPPORTED: c++03 - -// test that referencing quick_exit when TEST_HAS_QUICK_EXIT is not defined -// results in a compile error. - -#include - -#include "test_macros.h" - -int main(int, char**) { -#if !defined(TEST_HAS_QUICK_EXIT) - std::quick_exit(0); -#else -# error -#endif - return 0; -} diff --git a/libcxx/test/std/language.support/support.start.term/quick_exit.pass.cpp b/libcxx/test/std/language.support/support.start.term/quick_exit.pass.cpp --- a/libcxx/test/std/language.support/support.start.term/quick_exit.pass.cpp +++ b/libcxx/test/std/language.support/support.start.term/quick_exit.pass.cpp @@ -11,16 +11,10 @@ #include -#include "test_macros.h" - void f() {} -int main(int, char**) -{ -#ifdef TEST_HAS_QUICK_EXIT +int main(int, char**) { std::at_quick_exit(f); std::quick_exit(0); -#endif - - return 0; + return 0; } diff --git a/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp b/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp --- a/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp +++ b/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp @@ -19,7 +19,7 @@ #error CLOCKS_PER_SEC not defined #endif -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 #ifndef TIME_UTC #error TIME_UTC not defined #endif @@ -41,7 +41,7 @@ ((void)t); // Prevent unused warning ((void)tm); // Prevent unused warning ((void)str); // Prevent unused warning -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 std::timespec tmspec = {}; ((void)tmspec); // Prevent unused warning #endif @@ -50,7 +50,7 @@ static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#if TEST_STD_VER > 14 && defined(TEST_HAS_TIMESPEC_GET) +#if TEST_STD_VER > 14 static_assert((std::is_same::value), ""); #endif #ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h --- a/libcxx/test/support/test_macros.h +++ b/libcxx/test/support/test_macros.h @@ -163,67 +163,6 @@ # define TEST_CONSTEXPR_CXX20 #endif -// Sniff out to see if the underlying C library has C11 features -// This is cribbed from __config; but lives here as well because we can't assume libc++ -#if (defined(__ISO_C_VISIBLE) && (__ISO_C_VISIBLE >= 2011)) || \ - TEST_STD_VER >= 11 -# if defined(__FreeBSD__) -# if __FreeBSD_version >= 1300064 || \ - (__FreeBSD_version >= 1201504 && __FreeBSD_version < 1300000) -# define TEST_HAS_TIMESPEC_GET -# endif -# define TEST_HAS_ALIGNED_ALLOC -# define TEST_HAS_QUICK_EXIT -# elif defined(__BIONIC__) -# if __ANDROID_API__ >= 21 -# define TEST_HAS_QUICK_EXIT -# endif -# if __ANDROID_API__ >= 28 -# define TEST_HAS_ALIGNED_ALLOC -# endif -# if __ANDROID_API__ >= 29 -# define TEST_HAS_TIMESPEC_GET -# endif -# elif defined(__Fuchsia__) || defined(__wasi__) || defined(__NetBSD__) -# define TEST_HAS_QUICK_EXIT -# define TEST_HAS_ALIGNED_ALLOC -# define TEST_HAS_TIMESPEC_GET -# elif defined(__linux__) -// This block preserves the old behavior used by include/__config: -// _LIBCPP_GLIBC_PREREQ would be defined to 0 if __GLIBC_PREREQ was not -// available. The configuration here may be too vague though, as Bionic, uClibc, -// newlib, etc may all support these features but need to be configured. -# if defined(TEST_GLIBC_PREREQ) -# if TEST_GLIBC_PREREQ(2, 15) -# define TEST_HAS_QUICK_EXIT -# endif -# if TEST_GLIBC_PREREQ(2, 17) -# define TEST_HAS_ALIGNED_ALLOC -# define TEST_HAS_TIMESPEC_GET -# endif -# elif defined(_LIBCPP_HAS_MUSL_LIBC) -# define TEST_HAS_QUICK_EXIT -# define TEST_HAS_ALIGNED_ALLOC -# define TEST_HAS_TIMESPEC_GET -# endif -# elif defined(_WIN32) -# if defined(_MSC_VER) && !defined(__MINGW32__) -# define TEST_HAS_QUICK_EXIT -# define TEST_HAS_TIMESPEC_GET -# endif -# elif defined(__APPLE__) - // timespec_get and aligned_alloc were introduced in macOS 10.15 and - // aligned releases -# if ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101500) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 130000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 130000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 60000)) -# define TEST_HAS_ALIGNED_ALLOC -# define TEST_HAS_TIMESPEC_GET -# endif -# endif // __APPLE__ -#endif - /* Features that were introduced in C++14 */ #if TEST_STD_VER >= 14 #define TEST_HAS_EXTENDED_CONSTEXPR