summaryrefslogtreecommitdiffstats
path: root/libcxx/test/support/test_macros.h
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2018-07-31 18:23:57 +0000
committerMarshall Clow <mclow.lists@gmail.com>2018-07-31 18:23:57 +0000
commit119f0a56d271150600054534692f70e0b0cade0a (patch)
tree1ee25943326ed4de5b011b07a0b9191b8e3c3370 /libcxx/test/support/test_macros.h
parent1dac6ba7e25b7ee6a8a2c9f4718db3684225acfd (diff)
downloadbcm5719-llvm-119f0a56d271150600054534692f70e0b0cade0a.tar.gz
bcm5719-llvm-119f0a56d271150600054534692f70e0b0cade0a.zip
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.
llvm-svn: 338411
Diffstat (limited to 'libcxx/test/support/test_macros.h')
-rw-r--r--libcxx/test/support/test_macros.h47
1 files changed, 37 insertions, 10 deletions
diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h
index dbbfd53094e..ac6ec79b923 100644
--- a/libcxx/test/support/test_macros.h
+++ b/libcxx/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) \
OpenPOWER on IntegriCloud