From ed7c81d1726c7ecd03d1bc13eeb8d23fdffa5751 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Tue, 17 Aug 2021 11:21:09 -0400 Subject: [PATCH] [libc++] Convert test-suite workarounds for some C11 features to XFAILs Instead of trying to sniff out what features are supported by the library being tested, the way we normally handle these things is with Lit annotations. This should not be treated differently. Differential Revision: https://reviews.llvm.org/D108209 --- .../has_aligned_alloc.compile.pass.cpp | 19 ------- .../has_quick_exit.compile.pass.cpp | 19 ------- .../has_timespec_get.compile.pass.cpp | 19 ------- .../test/std/depr/depr.c.headers/stdlib_h.pass.cpp | 12 +++-- .../support.runtime/cstdlib.pass.cpp | 12 +++-- .../support.runtime/ctime.pass.cpp | 10 ++-- .../at_quick_exit.compile.fail.cpp | 27 ---------- .../support.start.term/quick_exit.compile.fail.cpp | 25 --------- .../support.start.term/quick_exit.pass.cpp | 17 +++--- .../std/utilities/time/date.time/ctime.pass.cpp | 12 +++-- libcxx/test/support/test_macros.h | 61 ---------------------- 11 files changed, 43 insertions(+), 190 deletions(-) delete mode 100644 libcxx/test/libcxx/language.support/has_aligned_alloc.compile.pass.cpp delete mode 100644 libcxx/test/libcxx/language.support/has_quick_exit.compile.pass.cpp delete mode 100644 libcxx/test/libcxx/language.support/has_timespec_get.compile.pass.cpp delete mode 100644 libcxx/test/std/language.support/support.start.term/at_quick_exit.compile.fail.cpp delete mode 100644 libcxx/test/std/language.support/support.start.term/quick_exit.compile.fail.cpp 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 index d1b41de..0000000 --- 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 index ad0fe6f..0000000 --- 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 index 8b86a5e..0000000 --- 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 index 295f518..7dcae5a 100644 --- 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,13 @@ // 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}} + +// ::aligned_alloc is not implemented on Windows +// XFAIL: target={{.+}}-pc-windows-{{.+}} + #include #include #include @@ -132,9 +139,8 @@ int main(int, char**) 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 index 668213f8..6cf58be 100644 --- 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,13 @@ // 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}} + +// ::aligned_alloc is not implemented on Windows +// XFAIL: target={{.+}}-pc-windows-{{.+}} + #include #include #include @@ -119,9 +126,8 @@ int main(int, char**) 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 index df82779..fd5cad3 100644 --- a/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp +++ b/libcxx/test/std/language.support/support.runtime/ctime.pass.cpp @@ -8,6 +8,10 @@ // test +// ::timespec_get 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 "test_macros.h" @@ -20,7 +24,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 +36,7 @@ int main(int, char**) 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 +48,7 @@ int main(int, char**) 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 index 79051fb..0000000 --- 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 index f9c5bdc..0000000 --- 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 index 16f68d4..83ff44a 100644 --- 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 @@ -5,22 +5,23 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// + // UNSUPPORTED: c++03 +// ::quick_exit and ::at_quick_exit are not implemented on macOS. +// TODO: We should never be using `darwin` as the triple, but LLVM's config.guess script +// guesses the host triple to be darwin instead of macosx when on macOS. +// XFAIL: target={{.+}}-apple-macosx{{.+}} +// XFAIL: target={{.+}}-apple-darwin{{.+}} + // test quick_exit and at_quick_exit #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 index 8ad3cca..8987a4c 100644 --- a/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp +++ b/libcxx/test/std/utilities/time/date.time/ctime.pass.cpp @@ -6,6 +6,12 @@ // //===----------------------------------------------------------------------===// +// test + +// ::timespec_get 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 @@ -19,7 +25,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 +47,7 @@ int main(int, char**) ((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 +56,7 @@ int main(int, char**) 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 index 4bccea6..1601261 100644 --- 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 -- 2.7.4