mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-21 23:30:38 +08:00
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
This commit is contained in:
29
test/libcxx/language.support/has_c11_features.pass.cpp
Normal file
29
test/libcxx/language.support/has_c11_features.pass.cpp
Normal file
@@ -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() {}
|
@@ -94,16 +94,6 @@
|
|||||||
#define TEST_GLIBC_PREREQ(major, minor) __GLIBC_PREREQ(major, minor)
|
#define TEST_GLIBC_PREREQ(major, minor) __GLIBC_PREREQ(major, minor)
|
||||||
#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 after C++14 */
|
|
||||||
#if TEST_STD_VER > 14
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TEST_STD_VER >= 11
|
#if TEST_STD_VER >= 11
|
||||||
#define TEST_ALIGNOF(...) alignof(__VA_ARGS__)
|
#define TEST_ALIGNOF(...) alignof(__VA_ARGS__)
|
||||||
#define TEST_ALIGNAS(...) alignas(__VA_ARGS__)
|
#define TEST_ALIGNAS(...) alignas(__VA_ARGS__)
|
||||||
@@ -132,6 +122,43 @@
|
|||||||
#define TEST_THROW_SPEC(...) throw(__VA_ARGS__)
|
#define TEST_THROW_SPEC(...) throw(__VA_ARGS__)
|
||||||
#endif
|
#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__))
|
#define TEST_ALIGNAS_TYPE(...) TEST_ALIGNAS(TEST_ALIGNOF(__VA_ARGS__))
|
||||||
|
|
||||||
#if !TEST_HAS_FEATURE(cxx_rtti) && !defined(__cpp_rtti) \
|
#if !TEST_HAS_FEATURE(cxx_rtti) && !defined(__cpp_rtti) \
|
||||||
|
Reference in New Issue
Block a user