From 2d0f1fa472a99dbb46735623363fe918feeda795 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Wed, 24 Mar 2021 18:19:12 -0400 Subject: [PATCH] [libc++] Header inclusion tests. As mandated by the Standard's various synopses, e.g. [iterator.synopsis]. Searching the TeX source for '#include' is a good way to find all of these mandates. The new tests are all autogenerated by utils/generate_header_inclusion_tests.py. I was SHOCKED by how many mandates there are, and how many of them libc++ wasn't conforming with. Differential Revision: https://reviews.llvm.org/D99309 --- libcxx/docs/Contributing.rst | 7 +- libcxx/include/chrono | 1 + libcxx/include/deque | 1 + libcxx/include/filesystem | 1 + libcxx/include/iterator | 2 + libcxx/include/map | 2 + libcxx/include/memory | 1 + libcxx/include/optional | 1 + libcxx/include/queue | 1 + libcxx/include/regex | 1 + libcxx/include/set | 2 + libcxx/include/string | 1 + libcxx/include/string_view | 1 + libcxx/include/system_error | 1 + libcxx/include/tuple | 1 + libcxx/include/typeindex | 1 + libcxx/include/unordered_map | 1 + libcxx/include/unordered_set | 1 + libcxx/include/utility | 1 + libcxx/include/variant | 1 + libcxx/include/vector | 1 + .../algorithm.inclusions.compile.pass.cpp | 26 +++ .../inclusions/array.inclusions.compile.pass.cpp | 29 +++ .../inclusions/bitset.inclusions.compile.pass.cpp | 29 +++ .../inclusions/chrono.inclusions.compile.pass.cpp | 28 +++ .../cinttypes.inclusions.compile.pass.cpp | 26 +++ .../complex.h.inclusions.compile.pass.cpp | 26 +++ .../inclusions/deque.inclusions.compile.pass.cpp | 29 +++ .../filesystem.inclusions.compile.pass.cpp | 29 +++ .../forward_list.inclusions.compile.pass.cpp | 29 +++ .../inclusions/ios.inclusions.compile.pass.cpp | 28 +++ .../iostream.inclusions.compile.pass.cpp | 37 ++++ .../iterator.inclusions.compile.pass.cpp | 29 +++ .../inclusions/list.inclusions.compile.pass.cpp | 29 +++ .../inclusions/map.inclusions.compile.pass.cpp | 29 +++ .../inclusions/memory.inclusions.compile.pass.cpp | 26 +++ .../optional.inclusions.compile.pass.cpp | 28 +++ .../inclusions/queue.inclusions.compile.pass.cpp | 29 +++ .../inclusions/random.inclusions.compile.pass.cpp | 26 +++ .../inclusions/regex.inclusions.compile.pass.cpp | 31 ++++ .../inclusions/set.inclusions.compile.pass.cpp | 29 +++ .../inclusions/stack.inclusions.compile.pass.cpp | 29 +++ .../inclusions/string.inclusions.compile.pass.cpp | 29 +++ .../string_view.inclusions.compile.pass.cpp | 28 +++ .../system_error.inclusions.compile.pass.cpp | 28 +++ .../tgmath.h.inclusions.compile.pass.cpp | 29 +++ .../inclusions/thread.inclusions.compile.pass.cpp | 29 +++ .../inclusions/tuple.inclusions.compile.pass.cpp | 28 +++ .../typeindex.inclusions.compile.pass.cpp | 26 +++ .../unordered_map.inclusions.compile.pass.cpp | 31 ++++ .../unordered_set.inclusions.compile.pass.cpp | 31 ++++ .../inclusions/utility.inclusions.compile.pass.cpp | 29 +++ .../valarray.inclusions.compile.pass.cpp | 26 +++ .../inclusions/variant.inclusions.compile.pass.cpp | 28 +++ .../inclusions/vector.inclusions.compile.pass.cpp | 29 +++ libcxx/utils/generate_header_inclusion_tests.py | 203 +++++++++++++++++++++ 56 files changed, 1202 insertions(+), 3 deletions(-) create mode 100644 libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/array.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/bitset.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/chrono.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/cinttypes.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/complex.h.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/filesystem.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/forward_list.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/ios.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/iostream.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/iterator.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/list.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/map.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/memory.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/optional.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/queue.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/random.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/regex.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/set.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/stack.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/string.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/string_view.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/system_error.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/tgmath.h.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/thread.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/tuple.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/typeindex.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/unordered_map.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/unordered_set.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/utility.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/valarray.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/variant.inclusions.compile.pass.cpp create mode 100644 libcxx/test/libcxx/inclusions/vector.inclusions.compile.pass.cpp create mode 100755 libcxx/utils/generate_header_inclusion_tests.py diff --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst index 20b614f..de71c7e 100644 --- a/libcxx/docs/Contributing.rst +++ b/libcxx/docs/Contributing.rst @@ -45,9 +45,10 @@ Adding a new header TODO When adding a new header to libc++: 1. Add a test under ``test/libcxx`` that the new header defines ``_LIBCPP_VERSION``. See ``test/libcxx/algorithms/version.pass.cpp`` for an example. -2. Run ``python utils/generate_header_tests.py``, verify and commit the modifications. -3. Create a submodule in ``include/module.modulemap`` for the new header. -4. Update the ``include/CMakeLists.txt`` file to include the new header. +2. Run ``python utils/generate_header_tests.py``; verify and commit the changes. +3. Modify ``python utils/generate_header_inclusion_tests.py``; run it; verify and commit the changes. +4. Create a submodule in ``include/module.modulemap`` for the new header. +5. Update the ``include/CMakeLists.txt`` file to include the new header. Exporting new symbols from the library ====================================== diff --git a/libcxx/include/chrono b/libcxx/include/chrono index c8aab5d..d6a0de8 100644 --- a/libcxx/include/chrono +++ b/libcxx/include/chrono @@ -825,6 +825,7 @@ constexpr chrono::year operator ""y(unsigned lo #include <__config> #include <__availability> +#include #include #include #include diff --git a/libcxx/include/deque b/libcxx/include/deque index 429dcab..607611c 100644 --- a/libcxx/include/deque +++ b/libcxx/include/deque @@ -162,6 +162,7 @@ template #include <__config> #include <__split_buffer> +#include #include #include #include diff --git a/libcxx/include/filesystem b/libcxx/include/filesystem index dc4ac6d..fcfc637 100644 --- a/libcxx/include/filesystem +++ b/libcxx/include/filesystem @@ -234,6 +234,7 @@ #include #include #include +#include #include #include #include diff --git a/libcxx/include/iterator b/libcxx/include/iterator index c02f523..54ea2aa 100644 --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -418,6 +418,8 @@ template constexpr const E* data(initializer_list il) noexcept; #include // for forward declarations of vector and string. #include <__functional_base> #include +#include +#include #include #include #include <__memory/base.h> diff --git a/libcxx/include/map b/libcxx/include/map index 9c3e5e6..ddb596f 100644 --- a/libcxx/include/map +++ b/libcxx/include/map @@ -480,6 +480,8 @@ erase_if(multimap& c, Predicate pred); // C++20 #include <__config> #include <__tree> #include <__node_handle> +#include +#include #include // __libcpp_erase_if_container #include #include diff --git a/libcxx/include/memory b/libcxx/include/memory index 3fa0f2c..484dafe 100644 --- a/libcxx/include/memory +++ b/libcxx/include/memory @@ -668,6 +668,7 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space); #include <__availability> #include #include +#include #include #include #include diff --git a/libcxx/include/optional b/libcxx/include/optional index 97a0bbe..1de9c8a 100644 --- a/libcxx/include/optional +++ b/libcxx/include/optional @@ -150,6 +150,7 @@ template #include <__availability> #include <__debug> #include <__functional_base> +#include #include #include #include diff --git a/libcxx/include/queue b/libcxx/include/queue index 05cc246..5091f67 100644 --- a/libcxx/include/queue +++ b/libcxx/include/queue @@ -179,6 +179,7 @@ template */ #include <__config> +#include #include #include #include diff --git a/libcxx/include/regex b/libcxx/include/regex index d78e488..466146d 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -765,6 +765,7 @@ typedef regex_token_iterator wsregex_token_iterator; #include <__config> #include #include <__locale> +#include #include #include #include diff --git a/libcxx/include/set b/libcxx/include/set index a5cf399..11991af 100644 --- a/libcxx/include/set +++ b/libcxx/include/set @@ -428,7 +428,9 @@ erase_if(multiset& c, Predicate pred); // C++20 #include <__config> #include <__tree> #include <__node_handle> +#include #include +#include #include // __libcpp_erase_if_container #include diff --git a/libcxx/include/string b/libcxx/include/string index 5f49b47..336922e 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -514,6 +514,7 @@ basic_string operator "" s( const char32_t *str, size_t len ); // C++1 */ #include <__config> +#include #include #include #include diff --git a/libcxx/include/string_view b/libcxx/include/string_view index bc92dd5..3177fcd 100644 --- a/libcxx/include/string_view +++ b/libcxx/include/string_view @@ -182,6 +182,7 @@ namespace std { #include <__string> #include #include +#include #include #include #include diff --git a/libcxx/include/system_error b/libcxx/include/system_error index 784adcc..9f3d8ac 100644 --- a/libcxx/include/system_error +++ b/libcxx/include/system_error @@ -145,6 +145,7 @@ template <> struct hash; #include <__config> #include <__errc> #include <__functional_base> // unary_function +#include #include #include #include diff --git a/libcxx/include/tuple b/libcxx/include/tuple index 6e07892..61ff212 100644 --- a/libcxx/include/tuple +++ b/libcxx/include/tuple @@ -151,6 +151,7 @@ template #include <__config> #include <__tuple> +#include #include #include #include <__functional_base> diff --git a/libcxx/include/typeindex b/libcxx/include/typeindex index bff1e65..a8d582e 100644 --- a/libcxx/include/typeindex +++ b/libcxx/include/typeindex @@ -47,6 +47,7 @@ struct hash #include <__config> #include #include <__functional_base> +#include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) #pragma GCC system_header diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map index fc10c8b..d061e52 100644 --- a/libcxx/include/unordered_map +++ b/libcxx/include/unordered_map @@ -434,6 +434,7 @@ template #include <__config> #include <__hash_table> #include <__node_handle> +#include #include #include // __libcpp_erase_if_container #include diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set index 726e373..99943f3 100644 --- a/libcxx/include/unordered_set +++ b/libcxx/include/unordered_set @@ -389,6 +389,7 @@ template #include <__config> #include <__hash_table> #include <__node_handle> +#include #include #include // __libcpp_erase_if_container #include diff --git a/libcxx/include/utility b/libcxx/include/utility index e81fcbe..bfde01c 100644 --- a/libcxx/include/utility +++ b/libcxx/include/utility @@ -201,6 +201,7 @@ template #include <__config> #include <__tuple> +#include #include #include #include diff --git a/libcxx/include/variant b/libcxx/include/variant index 4e3db1f..43b6aa7 100644 --- a/libcxx/include/variant +++ b/libcxx/include/variant @@ -203,6 +203,7 @@ namespace std { #include <__availability> #include <__tuple> #include +#include #include #include #include diff --git a/libcxx/include/vector b/libcxx/include/vector index 4e1a46a..2cd243a 100644 --- a/libcxx/include/vector +++ b/libcxx/include/vector @@ -276,6 +276,7 @@ erase_if(vector& c, Predicate pred); // C++20 #include <__bit_reference> #include #include +#include #include #include #include diff --git a/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp new file mode 100644 index 0000000..d2fde39 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_ALGORITHM) + # error " was expected to define _LIBCPP_ALGORITHM" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/array.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/array.inclusions.compile.pass.cpp new file mode 100644 index 0000000..7ec19fb --- /dev/null +++ b/libcxx/test/libcxx/inclusions/array.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_ARRAY) + # error " was expected to define _LIBCPP_ARRAY" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/bitset.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/bitset.inclusions.compile.pass.cpp new file mode 100644 index 0000000..c8d413c --- /dev/null +++ b/libcxx/test/libcxx/inclusions/bitset.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_BITSET) + # error " was expected to define _LIBCPP_BITSET" +#endif +#if !defined(_LIBCPP_IOSFWD) + # error " should include in C++03 and later" +#endif +#if !defined(_LIBCPP_STRING) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/chrono.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/chrono.inclusions.compile.pass.cpp new file mode 100644 index 0000000..ffcaeed --- /dev/null +++ b/libcxx/test/libcxx/inclusions/chrono.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_CHRONO) + # error " was expected to define _LIBCPP_CHRONO" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/cinttypes.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/cinttypes.inclusions.compile.pass.cpp new file mode 100644 index 0000000..61c0797 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/cinttypes.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_CINTTYPES) + # error " was expected to define _LIBCPP_CINTTYPES" +#endif +#if !defined(_LIBCPP_CSTDINT) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/complex.h.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/complex.h.inclusions.compile.pass.cpp new file mode 100644 index 0000000..5d2e943 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/complex.h.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_COMPLEX_H) + # error " was expected to define _LIBCPP_COMPLEX_H" +#endif +#if !defined(_LIBCPP_COMPLEX) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp new file mode 100644 index 0000000..d1563de --- /dev/null +++ b/libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_DEQUE) + # error " was expected to define _LIBCPP_DEQUE" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/filesystem.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/filesystem.inclusions.compile.pass.cpp new file mode 100644 index 0000000..6112320 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/filesystem.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03, c++11, c++14 +// UNSUPPORTED: libcpp-has-no-filesystem-library + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_FILESYSTEM) + # error " was expected to define _LIBCPP_FILESYSTEM" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/forward_list.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/forward_list.inclusions.compile.pass.cpp new file mode 100644 index 0000000..62ea06e --- /dev/null +++ b/libcxx/test/libcxx/inclusions/forward_list.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_FORWARD_LIST) + # error " was expected to define _LIBCPP_FORWARD_LIST" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/ios.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/ios.inclusions.compile.pass.cpp new file mode 100644 index 0000000..52fb9ee --- /dev/null +++ b/libcxx/test/libcxx/inclusions/ios.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: libcpp-has-no-localization + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_IOS) + # error " was expected to define _LIBCPP_IOS" +#endif +#if !defined(_LIBCPP_IOSFWD) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/iostream.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/iostream.inclusions.compile.pass.cpp new file mode 100644 index 0000000..4d1b448 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/iostream.inclusions.compile.pass.cpp @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: libcpp-has-no-localization + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_IOSTREAM) + # error " was expected to define _LIBCPP_IOSTREAM" +#endif +#if !defined(_LIBCPP_IOS) + # error " should include in C++03 and later" +#endif +#if !defined(_LIBCPP_ISTREAM) + # error " should include in C++03 and later" +#endif +#if !defined(_LIBCPP_OSTREAM) + # error " should include in C++03 and later" +#endif +#if !defined(_LIBCPP_STREAMBUF) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/iterator.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/iterator.inclusions.compile.pass.cpp new file mode 100644 index 0000000..11dfb74 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/iterator.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_ITERATOR) + # error " was expected to define _LIBCPP_ITERATOR" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_CONCEPTS) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/list.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/list.inclusions.compile.pass.cpp new file mode 100644 index 0000000..76cb06d --- /dev/null +++ b/libcxx/test/libcxx/inclusions/list.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_LIST) + # error " was expected to define _LIBCPP_LIST" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/map.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/map.inclusions.compile.pass.cpp new file mode 100644 index 0000000..319ee46 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/map.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_MAP) + # error " was expected to define _LIBCPP_MAP" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/memory.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/memory.inclusions.compile.pass.cpp new file mode 100644 index 0000000..6b1cd84b --- /dev/null +++ b/libcxx/test/libcxx/inclusions/memory.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_MEMORY) + # error " was expected to define _LIBCPP_MEMORY" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/optional.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/optional.inclusions.compile.pass.cpp new file mode 100644 index 0000000..7a6ff34 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/optional.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03, c++11, c++14 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_OPTIONAL) + # error " was expected to define _LIBCPP_OPTIONAL" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/queue.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/queue.inclusions.compile.pass.cpp new file mode 100644 index 0000000..f0bf7fb --- /dev/null +++ b/libcxx/test/libcxx/inclusions/queue.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_QUEUE) + # error " was expected to define _LIBCPP_QUEUE" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/random.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/random.inclusions.compile.pass.cpp new file mode 100644 index 0000000..68da450 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/random.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_RANDOM) + # error " was expected to define _LIBCPP_RANDOM" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/regex.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/regex.inclusions.compile.pass.cpp new file mode 100644 index 0000000..a2a66f4 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/regex.inclusions.compile.pass.cpp @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: libcpp-has-no-localization + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_REGEX) + # error " was expected to define _LIBCPP_REGEX" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/set.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/set.inclusions.compile.pass.cpp new file mode 100644 index 0000000..68350f5 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/set.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_SET) + # error " was expected to define _LIBCPP_SET" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/stack.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/stack.inclusions.compile.pass.cpp new file mode 100644 index 0000000..323abc2 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/stack.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_STACK) + # error " was expected to define _LIBCPP_STACK" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/string.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/string.inclusions.compile.pass.cpp new file mode 100644 index 0000000..d77ee0e --- /dev/null +++ b/libcxx/test/libcxx/inclusions/string.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_STRING) + # error " was expected to define _LIBCPP_STRING" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/string_view.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/string_view.inclusions.compile.pass.cpp new file mode 100644 index 0000000..a4b999e2 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/string_view.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03, c++11, c++14 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_STRING_VIEW) + # error " was expected to define _LIBCPP_STRING_VIEW" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/system_error.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/system_error.inclusions.compile.pass.cpp new file mode 100644 index 0000000..5c7f485 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/system_error.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_SYSTEM_ERROR) + # error " was expected to define _LIBCPP_SYSTEM_ERROR" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/tgmath.h.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/tgmath.h.inclusions.compile.pass.cpp new file mode 100644 index 0000000..25bc00d --- /dev/null +++ b/libcxx/test/libcxx/inclusions/tgmath.h.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_TGMATH_H) + # error " was expected to define _LIBCPP_TGMATH_H" +#endif +#if !defined(_LIBCPP_CMATH) + # error " should include in C++03 and later" +#endif +#if !defined(_LIBCPP_COMPLEX) + # error " should include in C++03 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/thread.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/thread.inclusions.compile.pass.cpp new file mode 100644 index 0000000..fc54674 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/thread.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 +// UNSUPPORTED: libcpp-has-no-threads + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_THREAD) + # error " was expected to define _LIBCPP_THREAD" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/tuple.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/tuple.inclusions.compile.pass.cpp new file mode 100644 index 0000000..58f05b1 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/tuple.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_TUPLE) + # error " was expected to define _LIBCPP_TUPLE" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/typeindex.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/typeindex.inclusions.compile.pass.cpp new file mode 100644 index 0000000..1cecb54 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/typeindex.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_TYPEINDEX) + # error " was expected to define _LIBCPP_TYPEINDEX" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/unordered_map.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/unordered_map.inclusions.compile.pass.cpp new file mode 100644 index 0000000..2abddcf --- /dev/null +++ b/libcxx/test/libcxx/inclusions/unordered_map.inclusions.compile.pass.cpp @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_UNORDERED_MAP) + # error " was expected to define _LIBCPP_UNORDERED_MAP" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/unordered_set.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/unordered_set.inclusions.compile.pass.cpp new file mode 100644 index 0000000..58bf215 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/unordered_set.inclusions.compile.pass.cpp @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_UNORDERED_SET) + # error " was expected to define _LIBCPP_UNORDERED_SET" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/utility.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/utility.inclusions.compile.pass.cpp new file mode 100644 index 0000000..b0e2163 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/utility.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_UTILITY) + # error " was expected to define _LIBCPP_UTILITY" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/valarray.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/valarray.inclusions.compile.pass.cpp new file mode 100644 index 0000000..3d3bf91 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/valarray.inclusions.compile.pass.cpp @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_VALARRAY) + # error " was expected to define _LIBCPP_VALARRAY" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/variant.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/variant.inclusions.compile.pass.cpp new file mode 100644 index 0000000..96adb19 --- /dev/null +++ b/libcxx/test/libcxx/inclusions/variant.inclusions.compile.pass.cpp @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// UNSUPPORTED: c++03, c++11, c++14 + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_VARIANT) + # error " was expected to define _LIBCPP_VARIANT" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif diff --git a/libcxx/test/libcxx/inclusions/vector.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/vector.inclusions.compile.pass.cpp new file mode 100644 index 0000000..2e6b36e --- /dev/null +++ b/libcxx/test/libcxx/inclusions/vector.inclusions.compile.pass.cpp @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_header_inclusion_tests.py +// and should not be edited manually. +// +// clang-format off + +// + +// Test that includes all the other headers it's supposed to. + +#include +#include "test_macros.h" + +#if !defined(_LIBCPP_VECTOR) + # error " was expected to define _LIBCPP_VECTOR" +#endif +#if TEST_STD_VER > 17 && !defined(_LIBCPP_COMPARE) + # error " should include in C++20 and later" +#endif +#if TEST_STD_VER > 03 && !defined(_LIBCPP_INITIALIZER_LIST) + # error " should include in C++11 and later" +#endif diff --git a/libcxx/utils/generate_header_inclusion_tests.py b/libcxx/utils/generate_header_inclusion_tests.py new file mode 100755 index 0000000..0bf318e --- /dev/null +++ b/libcxx/utils/generate_header_inclusion_tests.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python + +import os + + +def get_libcxx_paths(): + utils_path = os.path.dirname(os.path.abspath(__file__)) + script_name = os.path.basename(__file__) + assert os.path.exists(utils_path) + src_root = os.path.dirname(utils_path) + test_path = os.path.join(src_root, 'test', 'libcxx', 'inclusions') + assert os.path.exists(test_path) + assert os.path.exists(os.path.join(test_path, 'algorithm.inclusions.compile.pass.cpp')) + return script_name, src_root, test_path + + +script_name, source_root, test_path = get_libcxx_paths() + + +# This table was produced manually, by grepping the TeX source of the Standard's +# library clauses for the string "#include". Each header's synopsis contains +# explicit "#include" directives for its mandatory inclusions. +# For example, [algorithm.syn] contains "#include ". +# +mandatory_inclusions = { + "algorithm": ["initializer_list"], + "array": ["compare", "initializer_list"], + "bitset": ["iosfwd", "string"], + "chrono": ["compare"], + "cinttypes": ["cstdint"], + "complex.h": ["complex"], + # TODO "coroutine": ["compare"], + "deque": ["compare", "initializer_list"], + "filesystem": ["compare"], + "forward_list": ["compare", "initializer_list"], + "ios": ["iosfwd"], + "iostream": ["ios", "istream", "ostream", "streambuf"], + "iterator": ["compare", "concepts"], + "list": ["compare", "initializer_list"], + "map": ["compare", "initializer_list"], + "memory": ["compare"], + "optional": ["compare"], + "queue": ["compare", "initializer_list"], + "random": ["initializer_list"], + # TODO "ranges": ["compare", "initializer_list", "iterator"], + "regex": ["compare", "initializer_list"], + "set": ["compare", "initializer_list"], + "stack": ["compare", "initializer_list"], + "string": ["compare", "initializer_list"], + "string_view": ["compare"], + # TODO "syncstream": ["ostream"], + "system_error": ["compare"], + "tgmath.h": ["cmath", "complex"], + "thread": ["compare"], + "tuple": ["compare"], + "typeindex": ["compare"], + "unordered_map": ["compare", "initializer_list"], + "unordered_set": ["compare", "initializer_list"], + "utility": ["compare", "initializer_list"], + "valarray": ["initializer_list"], + "variant": ["compare"], + "vector": ["compare", "initializer_list"], +} + +new_in_version = { + "chrono": "11", + "compare": "20", + "concepts": "20", + "coroutine": "20", + "filesystem": "17", + "initializer_list": "11", + "optional": "17", + "system_error": "11", + "thread": "11", + "tuple": "11", + "unordered_map": "11", + "unordered_set": "11", + "string_view": "17", + "ranges": "20", + "syncstream": "20", + "variant": "17", +} + +assert all(v == sorted(v) for k, v in mandatory_inclusions.items()) + +# Map from each header to the Lit annotations that should be used for +# tests that include that header. +# +# For example, when threads are not supported, any test +# that includes should be marked as UNSUPPORTED, because including +# is a hard error in that case. +lit_markup = { + "atomic": ["UNSUPPORTED: libcpp-has-no-threads"], + "barrier": ["UNSUPPORTED: libcpp-has-no-threads"], + "filesystem": ["UNSUPPORTED: libcpp-has-no-filesystem-library"], + "iomanip": ["UNSUPPORTED: libcpp-has-no-localization"], + "istream": ["UNSUPPORTED: libcpp-has-no-localization"], + "ios": ["UNSUPPORTED: libcpp-has-no-localization"], + "iostream": ["UNSUPPORTED: libcpp-has-no-localization"], + "latch": ["UNSUPPORTED: libcpp-has-no-threads"], + "locale": ["UNSUPPORTED: libcpp-has-no-localization"], + "ostream": ["UNSUPPORTED: libcpp-has-no-localization"], + "regex": ["UNSUPPORTED: libcpp-has-no-localization"], + "semaphore": ["UNSUPPORTED: libcpp-has-no-threads"], + "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"], + "thread": ["UNSUPPORTED: libcpp-has-no-threads"], +} + + +def get_std_ver_test(includee): + v = new_in_version.get(includee, "03") + if v == "03": + return '' + versions = ["03", "11", "14", "17", "20"] + return 'TEST_STD_VER > {} && '.format(max(i for i in versions if i < v)) + + +def get_unsupported_line(includee): + v = new_in_version.get(includee, "03") + return { + "03": [], + "11": ['UNSUPPORTED: c++03'], + "14": ['UNSUPPORTED: c++03, c++11'], + "17": ['UNSUPPORTED: c++03, c++11, c++14'], + "20": ['UNSUPPORTED: c++03, c++11, c++14, c++17'], + "2b": ['UNSUPPORTED: c++03, c++11, c++14, c++17, c++20'], + }[v] + + +def get_libcpp_header_symbol(header_name): + return '_LIBCPP_' + header_name.upper().replace('.', '_') + + +def get_includer_symbol_test(includer): + symbol = get_libcpp_header_symbol(includer) + return """ +#if !defined({symbol}) + # error "{message}" +#endif + """.strip().format( + symbol=symbol, + message="<{}> was expected to define {}".format(includer, symbol), + ) + + +def get_ifdef(includer, includee): + version = max(new_in_version.get(h, "03") for h in [includer, includee]) + symbol = get_libcpp_header_symbol(includee) + return """ +#if {includee_test}!defined({symbol}) + # error "{message}" +#endif + """.strip().format( + includee_test=get_std_ver_test(includee), + symbol=symbol, + message="<{}> should include <{}> in C++{} and later".format(includer, includee, version) + ) + + +test_body_template = """ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by {script_name} +// and should not be edited manually. +// +// clang-format off +{markup} +// <{header}> + +// Test that <{header}> includes all the other headers it's supposed to. + +#include <{header}> +#include "test_macros.h" + +{test_includers_symbol} +{test_per_includee} +""".strip() + + +def produce_tests(): + for includer, includees in mandatory_inclusions.items(): + markup_tags = get_unsupported_line(includer) + lit_markup.get(includer, []) + test_body = test_body_template.format( + script_name=script_name, + header=includer, + markup=('\n' + '\n'.join('// ' + m for m in markup_tags) + '\n') if markup_tags else '', + test_includers_symbol=get_includer_symbol_test(includer), + test_per_includee='\n'.join(get_ifdef(includer, includee) for includee in includees), + ) + test_name = "{header}.inclusions.compile.pass.cpp".format(header=includer) + out_path = os.path.join(test_path, test_name) + with open(out_path, 'w', newline='\n') as f: + f.write(test_body + '\n') + + +if __name__ == '__main__': + produce_tests() -- 2.7.4