diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2018-07-31 18:23:57 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2018-07-31 18:23:57 +0000 |
commit | 1bef51a0b59ad0e8b135f6ac7f57f7690e57f06c (patch) | |
tree | b58e04caf37090cd7e4de59f993ce29693dcfbcc | |
parent | decf28e84f33e3f0fd1cf5e7a6d6d191d8249857 (diff) |
Introduce a new test macro TEST_HAS_C11_FEATURES which is set when the underlying C library has C11 features. In C++17, we use those features. <__config> defines a similar macro, _LIBCPP_HAS_C11_FEATURES, but we don't want to use that in the library-independent parts of the tests, so define the new one. Also add a libc++-specific test to make sure the two stay in sync.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@338411 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/libcxx/language.support/has_c11_features.pass.cpp | 29 | ||||
-rw-r--r-- | test/support/test_macros.h | 47 |
2 files changed, 66 insertions, 10 deletions
diff --git a/test/libcxx/language.support/has_c11_features.pass.cpp b/test/libcxx/language.support/has_c11_features.pass.cpp new file mode 100644 index 000000000..cdccc00e2 --- /dev/null +++ b/test/libcxx/language.support/has_c11_features.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11, c++14 + +// We have two macros for checking whether or not the underlying C library +// has C11 features: +// TEST_HAS_C11_FEATURES - which is defined in "test_macros.h" +// _LIBCPP_HAS_C11_FEATURES - which is defined in <__config> +// They should always be the same + +#ifdef TEST_HAS_C11_FEATURES +# ifndef _LIBCPP_HAS_C11_FEATURES +# error "TEST_HAS_C11_FEATURES is defined, but _LIBCPP_HAS_C11_FEATURES is not" +# endif +#endif + +#ifdef _LIBCPP_HAS_C11_FEATURES +# ifndef TEST_HAS_C11_FEATURES +# error "_LIBCPP_HAS_C11_FEATURES is defined, but TEST_HAS_C11_FEATURES is not" +# endif +#endif + +int main() {} diff --git a/test/support/test_macros.h b/test/support/test_macros.h index dbbfd5309..ac6ec79b9 100644 --- a/test/support/test_macros.h +++ b/test/support/test_macros.h @@ -94,16 +94,6 @@ #define TEST_GLIBC_PREREQ(major, minor) __GLIBC_PREREQ(major, minor) #endif -/* Features that were introduced in C++14 */ -#if TEST_STD_VER >= 14 -#define TEST_HAS_EXTENDED_CONSTEXPR -#define TEST_HAS_VARIABLE_TEMPLATES -#endif - -/* Features that were introduced after C++14 */ -#if TEST_STD_VER > 14 -#endif - #if TEST_STD_VER >= 11 #define TEST_ALIGNOF(...) alignof(__VA_ARGS__) #define TEST_ALIGNAS(...) alignas(__VA_ARGS__) @@ -132,6 +122,43 @@ #define TEST_THROW_SPEC(...) throw(__VA_ARGS__) #endif +// 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. +#if __ISO_C_VISIBLE >= 2011 +# if defined(__FreeBSD__) +# define TEST_HAS_C11_FEATURES +# elif defined(__Fuchsia__) +# define TEST_HAS_C11_FEATURES +# elif defined(__linux__) +# if !defined(_LIBCPP_HAS_MUSL_LIBC) +# if _LIBCPP_GLIBC_PREREQ(2, 17) +# define TEST_HAS_C11_FEATURES +# endif +# else // defined(_LIBCPP_HAS_MUSL_LIBC) +# define TEST_HAS_C11_FEATURES +# endif +# elif defined(_WIN32) +# if defined(_MSC_VER) && !defined(__MINGW32__) +# define TEST_HAS_C11_FEATURES // Using Microsoft's C Runtime library +# endif +# endif +#endif + +/* Features that were introduced in C++14 */ +#if TEST_STD_VER >= 14 +#define TEST_HAS_EXTENDED_CONSTEXPR +#define TEST_HAS_VARIABLE_TEMPLATES +#endif + +/* Features that were introduced in C++17 */ +#if TEST_STD_VER >= 17 +#endif + +/* Features that were introduced after C++17 */ +#if TEST_STD_VER > 17 +#endif + + #define TEST_ALIGNAS_TYPE(...) TEST_ALIGNAS(TEST_ALIGNOF(__VA_ARGS__)) #if !TEST_HAS_FEATURE(cxx_rtti) && !defined(__cpp_rtti) \ |