diff --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst --- a/libcxx/docs/Contributing.rst +++ b/libcxx/docs/Contributing.rst @@ -48,7 +48,7 @@ - Did you add it to ``include/module.modulemap.in``? - Did you add it to ``include/CMakeLists.txt``? - - If it's a public header, did you update ``utils/generate_header_inclusion_tests.py``? + - If it's a public header, did you update ``utils/libcxx/test/header_information.py``? - Did you add the relevant feature test macro(s) for your feature? Did you update the ``generate_feature_test_macro_components.py`` script with it? - Did you run the ``libcxx-generate-files`` target and verify its output? diff --git a/libcxx/test/libcxx/header_inclusions.gen.py b/libcxx/test/libcxx/header_inclusions.gen.py new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/header_inclusions.gen.py @@ -0,0 +1,47 @@ +#===----------------------------------------------------------------------===## +# +# 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 +# +#===----------------------------------------------------------------------===## + +# Test that all headers include all the other headers they're supposed to, as +# prescribed by the Standard. + +# RUN: %{python} %s %{libcxx}/utils + +import sys +sys.path.append(sys.argv[1]) +from libcxx.test.header_information import header_restrictions, public_headers, mandatory_inclusions + +for header in public_headers: + test_condition_begin = '#if ' + header_restrictions[header] if header in header_restrictions else '' + test_condition_end = '#endif' if header in header_restrictions else '' + + header_guard = lambda h: f"_LIBCPP_{h.upper().replace('.', '_').replace('/', '_')}" + + # has no header guards + if header == 'cassert': + checks = '' + else: + checks = f''' +#ifndef {header_guard(header)} +# error <{header}> was expected to define a header guard {header_guard(header)} +#endif +''' + for includee in mandatory_inclusions.get(header, []): + checks += f''' +#ifndef {header_guard(includee)} +# error <{header}> was expected to include <{includee}> +#endif +''' + + print(f"""\ +//--- {header}.compile.pass.cpp +#include <__config> +{test_condition_begin} +#include <{header}> +{checks} +{test_condition_end} +""") diff --git a/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/algorithm.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/array.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/bitset.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/chrono.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/cinttypes.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/complex.h.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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/coroutine.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/coroutine.inclusions.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/coroutine.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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, c++17 - -// - -// Test that includes all the other headers it's supposed to. - -#include -#include "test_macros.h" - -#if !defined(_LIBCPP_COROUTINE) - # error " was expected to define _LIBCPP_COROUTINE" -#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/deque.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/deque.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/filesystem.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: no-filesystem - -// - -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/forward_list.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/ios.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/iostream.inclusions.compile.pass.cpp +++ /dev/null @@ -1,37 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/iterator.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/list.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/map.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/memory.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/optional.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/queue.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/random.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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/ranges.inclusions.compile.pass.cpp b/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/ranges.inclusions.compile.pass.cpp +++ /dev/null @@ -1,34 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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, c++17 - -// - -// Test that includes all the other headers it's supposed to. - -#include -#include "test_macros.h" - -#if !defined(_LIBCPP_RANGES) - # error " was expected to define _LIBCPP_RANGES" -#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++20 and later" -#endif -#if !defined(_LIBCPP_ITERATOR) - # error " should include in C++20 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/regex.inclusions.compile.pass.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/set.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/stack.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/string.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/string_view.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/system_error.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/tgmath.h.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/thread.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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: 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/tuple.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/typeindex.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/unordered_map.inclusions.compile.pass.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/unordered_set.inclusions.compile.pass.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/utility.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/valarray.inclusions.compile.pass.cpp +++ /dev/null @@ -1,26 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/variant.inclusions.compile.pass.cpp +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 deleted file mode 100644 --- a/libcxx/test/libcxx/inclusions/vector.inclusions.compile.pass.cpp +++ /dev/null @@ -1,29 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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/CMakeLists.txt b/libcxx/utils/CMakeLists.txt --- a/libcxx/utils/CMakeLists.txt +++ b/libcxx/utils/CMakeLists.txt @@ -1,8 +1,3 @@ - -add_custom_target(libcxx-generate-public-header-transitive-inclusion-tests - COMMAND "${Python3_EXECUTABLE}" "${LIBCXX_SOURCE_DIR}/utils/generate_header_inclusion_tests.py" - COMMENT "Generate tests checking for mandated transitive includes in public headers.") - add_custom_target(libcxx-generate-public-header-tests COMMAND "${Python3_EXECUTABLE}" "${LIBCXX_SOURCE_DIR}/utils/generate_header_tests.py" COMMENT "Generate tests for including public headers.") @@ -46,8 +41,7 @@ COMMENT "Generate the mapping file for include-what-you-use") add_custom_target(libcxx-generate-files - DEPENDS libcxx-generate-public-header-transitive-inclusion-tests - libcxx-generate-public-header-tests + DEPENDS libcxx-generate-public-header-tests libcxx-generate-feature-test-macros libcxx-generate-extended-grapheme-cluster-tables libcxx-generate-extended-grapheme-cluster-tests diff --git a/libcxx/utils/generate_header_inclusion_tests.py b/libcxx/utils/generate_header_inclusion_tests.py deleted file mode 100755 --- a/libcxx/utils/generate_header_inclusion_tests.py +++ /dev/null @@ -1,215 +0,0 @@ -#!/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"], - "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"], - "ranges": ["compare", "initializer_list", "iterator"], - "regex": ["compare", "initializer_list"], - "set": ["compare", "initializer_list"], - "stack": ["compare", "initializer_list"], - "string_view": ["compare"], - "string": ["compare", "initializer_list"], - # 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", - "cuchar": "11", - "expected": "23", - "filesystem": "17", - "initializer_list": "11", - "optional": "17", - "ranges": "20", - "string_view": "17", - "syncstream": "20", - "system_error": "11", - "thread": "11", - "tuple": "11", - "uchar.h": "11", - "unordered_map": "11", - "unordered_set": "11", - "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 = { - "barrier": ["UNSUPPORTED: no-threads"], - "filesystem": ["UNSUPPORTED: no-filesystem"], - "iomanip": ["UNSUPPORTED: no-localization"], - "ios": ["UNSUPPORTED: no-localization"], - "iostream": ["UNSUPPORTED: no-localization"], - "istream": ["UNSUPPORTED: no-localization"], - "latch": ["UNSUPPORTED: no-threads"], - "locale": ["UNSUPPORTED: no-localization"], - "mutex": ["UNSUPPORTED: no-threads"], - "ostream": ["UNSUPPORTED: no-localization"], - "regex": ["UNSUPPORTED: no-localization"], - "semaphore": ["UNSUPPORTED: no-threads"], - "shared_mutex": ["UNSUPPORTED: no-threads"], - "thread": ["UNSUPPORTED: 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"], - "23": ["UNSUPPORTED: c++03, c++11, c++14, c++17, c++20"], - "26": ["UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23"], - }[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() diff --git a/libcxx/utils/libcxx/test/header_information.py b/libcxx/utils/libcxx/test/header_information.py --- a/libcxx/utils/libcxx/test/header_information.py +++ b/libcxx/utils/libcxx/test/header_information.py @@ -121,6 +121,50 @@ "__verbose_abort", ] +# 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"], + "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"], + "ranges": ["compare", "initializer_list", "iterator"], + "regex": ["compare", "initializer_list"], + "set": ["compare", "initializer_list"], + "stack": ["compare", "initializer_list"], + "string_view": ["compare"], + "string": ["compare", "initializer_list"], + # 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"], +} + def is_header(file): """Returns whether the given file is a header (i.e. not a directory or the modulemap file).""" return (