Fix feature test macros for atomics/mutexes without threading

llvm-svn: 351291
This commit is contained in:
Eric Fiselier 2019-01-16 02:10:28 +00:00
parent d01a4aa068
commit 05019eb79f
5 changed files with 189 additions and 77 deletions

View File

@ -135,7 +135,9 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_quoted_string_io 201304L
# define __cpp_lib_result_of_sfinae 201210L
# define __cpp_lib_robust_nonmodifying_seq_ops 201304L
# define __cpp_lib_shared_timed_mutex 201402L
# if !defined(_LIBCPP_HAS_NO_THREADS)
# define __cpp_lib_shared_timed_mutex 201402L
# endif
# define __cpp_lib_string_udls 201304L
# define __cpp_lib_transformation_trait_aliases 201304L
# define __cpp_lib_transparent_operators 201210L
@ -152,7 +154,9 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_apply 201603L
# define __cpp_lib_array_constexpr 201603L
# define __cpp_lib_as_const 201510L
# define __cpp_lib_atomic_is_always_lock_free 201603L
# if !defined(_LIBCPP_HAS_NO_THREADS)
# define __cpp_lib_atomic_is_always_lock_free 201603L
# endif
# define __cpp_lib_bool_constant 201505L
// # define __cpp_lib_boyer_moore_searcher 201603L
# define __cpp_lib_byte 201603L
@ -188,7 +192,9 @@ __cpp_lib_void_t 201411L <type_traits>
# define __cpp_lib_raw_memory_algorithms 201606L
# define __cpp_lib_sample 201603L
# define __cpp_lib_scoped_lock 201703L
# define __cpp_lib_shared_mutex 201505L
# if !defined(_LIBCPP_HAS_NO_THREADS)
# define __cpp_lib_shared_mutex 201505L
# endif
// # define __cpp_lib_shared_ptr_arrays 201611L
# define __cpp_lib_shared_ptr_weak_type 201606L
# define __cpp_lib_string_view 201606L
@ -203,7 +209,9 @@ __cpp_lib_void_t 201411L <type_traits>
#endif
#if _LIBCPP_STD_VER > 17
// # define __cpp_lib_atomic_ref 201806L
# if !defined(_LIBCPP_HAS_NO_THREADS)
// # define __cpp_lib_atomic_ref 201806L
# endif
// # define __cpp_lib_bind_front 201811L
// # define __cpp_lib_bit_cast 201806L
# if !defined(_LIBCPP_NO_HAS_CHAR8_T)

View File

@ -10,6 +10,8 @@
// WARNING: This test was generated by generate_feature_test_macros_tests.py and
// should not be edited manually.
// UNSUPPORTED: libcpp-has-no-threads
// <atomic>
// Test the feature test macros defined by <atomic>
@ -53,11 +55,17 @@
#elif TEST_STD_VER == 17
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17"
# endif
# else
# ifdef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifdef __cpp_lib_atomic_ref
@ -70,11 +78,17 @@
#elif TEST_STD_VER > 17
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++2a"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++2a"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++2a"
# endif
# else
# ifdef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# if !defined(_LIBCPP_VERSION)

View File

@ -148,14 +148,18 @@ feature_test_macros = sorted([ add_version_header(x) for x in [
"values": {
"c++14": 201402L,
},
"headers": ["shared_mutex"]
"headers": ["shared_mutex"],
"depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
"internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
},
# C++17 macros
{"name": "__cpp_lib_atomic_is_always_lock_free",
"values": {
"c++17": 201603L,
},
"headers": ["atomic"]
"headers": ["atomic"],
"depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
"internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
},
{"name": "__cpp_lib_filesystem",
"values": {
@ -446,6 +450,8 @@ feature_test_macros = sorted([ add_version_header(x) for x in [
"c++17": 201505L,
},
"headers": ["shared_mutex"],
"depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
"internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
},
{"name": "__cpp_lib_scoped_lock",
"values": {
@ -553,6 +559,8 @@ feature_test_macros = sorted([ add_version_header(x) for x in [
},
"headers": ["atomic"],
"unimplemented": True,
"depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
"internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
},
]], key=lambda tc: tc["name"])
@ -802,6 +810,10 @@ def generate_synopsis(test_list):
result += "*/"
return result
def is_threading_header_unsafe_to_include(h):
# NOTE: "<mutex>" does not blow up when included without threads.
return h in ['atomic', 'shared_mutex']
def produce_tests():
headers = set([h for tc in feature_test_macros for h in tc["headers"]])
for h in headers:
@ -810,6 +822,9 @@ def produce_tests():
for tc in test_list:
assert 'unimplemented' in tc.keys()
continue
test_tags = ""
if is_threading_header_unsafe_to_include(h):
test_tags += '\n// UNSUPPORTED: libcpp-has-no-threads\n'
test_body = \
"""//===----------------------------------------------------------------------===//
//
@ -822,7 +837,7 @@ def produce_tests():
//
// WARNING: This test was generated by generate_feature_test_macros_tests.py and
// should not be edited manually.
{test_tags}
// <{header}>
// Test the feature test macros defined by <{header}>
@ -852,6 +867,7 @@ def produce_tests():
int main() {{}}
""".format(header=h,
test_tags=test_tags,
synopsis=generate_synopsis(test_list),
cxx11_tests=generate_std_test(test_list, 'c++11').strip(),
cxx14_tests=generate_std_test(test_list, 'c++14').strip(),

View File

@ -10,6 +10,8 @@
// WARNING: This test was generated by generate_feature_test_macros_tests.py and
// should not be edited manually.
// UNSUPPORTED: libcpp-has-no-threads
// <shared_mutex>
// Test the feature test macros defined by <shared_mutex>
@ -38,43 +40,73 @@
# error "__cpp_lib_shared_mutex should not be defined before c++17"
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++14"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++14"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
#elif TEST_STD_VER == 17
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++17"
# endif
# else
# ifdef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
#elif TEST_STD_VER > 17
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++2a"
# endif
# else
# ifdef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++2a"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
#endif // TEST_STD_VER > 17

View File

@ -749,11 +749,17 @@
# error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++14"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++14"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifndef __cpp_lib_string_udls
@ -873,11 +879,17 @@
# error "__cpp_lib_as_const should have the value 201510L in c++17"
# endif
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17"
# endif
# else
# ifdef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifdef __cpp_lib_atomic_ref
@ -1289,11 +1301,17 @@
# error "__cpp_lib_scoped_lock should have the value 201703L in c++17"
# endif
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++17"
# endif
# else
# ifdef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# if !defined(_LIBCPP_VERSION)
@ -1316,11 +1334,17 @@
# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17"
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifndef __cpp_lib_string_udls
@ -1467,11 +1491,17 @@
# error "__cpp_lib_as_const should have the value 201510L in c++2a"
# endif
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++2a"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should be defined in c++2a"
# endif
# if __cpp_lib_atomic_is_always_lock_free != 201603L
# error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++2a"
# endif
# else
# ifdef __cpp_lib_atomic_is_always_lock_free
# error "__cpp_lib_atomic_is_always_lock_free should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# if !defined(_LIBCPP_VERSION)
@ -1994,11 +2024,17 @@
# error "__cpp_lib_scoped_lock should have the value 201703L in c++2a"
# endif
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_mutex != 201505L
# error "__cpp_lib_shared_mutex should have the value 201505L in c++2a"
# endif
# else
# ifdef __cpp_lib_shared_mutex
# error "__cpp_lib_shared_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# if !defined(_LIBCPP_VERSION)
@ -2021,11 +2057,17 @@
# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++2a"
# endif
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++2a"
# if !defined(_LIBCPP_HAS_NO_THREADS)
# ifndef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should be defined in c++2a"
# endif
# if __cpp_lib_shared_timed_mutex != 201402L
# error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++2a"
# endif
# else
# ifdef __cpp_lib_shared_timed_mutex
# error "__cpp_lib_shared_timed_mutex should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
# endif
# endif
# ifndef __cpp_lib_string_udls