[libc++] Use Lit annotations for all .gen.py tests

Instead of guarding header tests using #ifdefs inside the tests,
use Lit markup to mark all the tests as unsupported. This is simpler
but also provides better feedback about which tests are being run
when running the test suite.

Differential Revision: https://reviews.llvm.org/D151893

GitOrigin-RevId: 7d2b9fafabd6f1a67e05ab2fa0abb5f7c8a451e7
diff --git a/include/__memory_resource/synchronized_pool_resource.h b/include/__memory_resource/synchronized_pool_resource.h
index 576a29a..cddcd34 100644
--- a/include/__memory_resource/synchronized_pool_resource.h
+++ b/include/__memory_resource/synchronized_pool_resource.h
@@ -14,9 +14,7 @@
 #include <__memory_resource/pool_options.h>
 #include <__memory_resource/unsynchronized_pool_resource.h>
 #include <cstddef>
-#if !defined(_LIBCPP_HAS_NO_THREADS)
-#  include <mutex>
-#endif
+#include <mutex>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/test/libcxx/assertions/headers_declare_verbose_abort.gen.py b/test/libcxx/assertions/headers_declare_verbose_abort.gen.py
index 2bf9b66..f72c257 100644
--- a/test/libcxx/assertions/headers_declare_verbose_abort.gen.py
+++ b/test/libcxx/assertions/headers_declare_verbose_abort.gen.py
@@ -14,22 +14,20 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 for header in public_headers:
     # Skip C compatibility headers.
     if header.endswith('.h'):
         continue
 
-    test_condition_begin = f'#if {header_restrictions[header]}' if header in header_restrictions else ''
-    test_condition_end = '#endif' if header in header_restrictions else ''
-    XFAIL = 'XFAIL' # Make sure Lit doesn't think we are XFAILing this test
+    BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
     print(f"""\
 //--- {header}.compile.pass.cpp
-// {XFAIL}: availability-verbose_abort-missing
-#include <__config>
-{test_condition_begin}
+{lit_header_restrictions.get(header, '')}
+
+// XFAIL{BLOCKLIT}: availability-verbose_abort-missing
+
 #include <{header}>
 using HandlerType = decltype(std::__libcpp_verbose_abort);
-{test_condition_end}
 """)
diff --git a/test/libcxx/clang_tidy.gen.py b/test/libcxx/clang_tidy.gen.py
index 7ced030..a7b8e7b 100644
--- a/test/libcxx/clang_tidy.gen.py
+++ b/test/libcxx/clang_tidy.gen.py
@@ -12,13 +12,10 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 for header in public_headers:
   BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
-  test_condition_begin = '#if ' + header_restrictions[header] if header in header_restrictions else ''
-  test_condition_end = '#endif' if header in header_restrictions else ''
-
   print(f"""\
 //--- {header}.sh.cpp
 
@@ -27,12 +24,11 @@
 // The GCC compiler flags are not always compatible with clang-tidy.
 // UNSUPPORTED{BLOCKLIT}: gcc
 
+{lit_header_restrictions.get(header, '')}
+
 // TODO: run clang-tidy with modules enabled once they are supported
 // RUN{BLOCKLIT}: %{{clang-tidy}} %s --warnings-as-errors=* -header-filter=.* --checks='-*,libcpp-*' --load=%{{test-tools}}/clang_tidy_checks/libcxx-tidy.plugin -- %{{compile_flags}} -fno-modules
 // RUN{BLOCKLIT}: %{{clang-tidy}} %s --warnings-as-errors=* -header-filter=.* --config-file=%{{libcxx}}/.clang-tidy -- -Wweak-vtables %{{compile_flags}} -fno-modules
 
-#include <__config>
-{test_condition_begin}
 #include <{header}>
-{test_condition_end}
 """)
diff --git a/test/libcxx/double_include.gen.py b/test/libcxx/double_include.gen.py
index 10b7be3..ad18121 100644
--- a/test/libcxx/double_include.gen.py
+++ b/test/libcxx/double_include.gen.py
@@ -12,29 +12,22 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
-BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
-print(f"""\
-//--- double_include.sh.cpp
+for header in public_headers:
+  BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
+  print(f"""\
+//--- {header}.sh.cpp
+{lit_header_restrictions.get(header, '')}
+
 // RUN{BLOCKLIT}: %{{cxx}} -c %s -o %t.first.o %{{flags}} %{{compile_flags}}
 // RUN{BLOCKLIT}: %{{cxx}} -c %s -o %t.second.o -DWITH_MAIN %{{flags}} %{{compile_flags}}
 // RUN{BLOCKLIT}: %{{cxx}} -o %t.exe %t.first.o %t.second.o %{{flags}} %{{link_flags}}
 // RUN{BLOCKLIT}: %{{run}}
-""")
 
-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 ''
-  print(f"""\
-#include <__config>
-{test_condition_begin}
 #include <{header}>
-{test_condition_end}
-""")
 
-print("""
 #if defined(WITH_MAIN)
-int main(int, char**) { return 0; }
+int main(int, char**) {{ return 0; }}
 #endif
 """)
diff --git a/test/libcxx/header_inclusions.gen.py b/test/libcxx/header_inclusions.gen.py
index 3273f01..f41ac27 100644
--- a/test/libcxx/header_inclusions.gen.py
+++ b/test/libcxx/header_inclusions.gen.py
@@ -13,12 +13,9 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers, mandatory_inclusions
+from libcxx.test.header_information import lit_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('/', '_')}"
 
   # <cassert> has no header guards
@@ -39,9 +36,8 @@
 
   print(f"""\
 //--- {header}.compile.pass.cpp
-#include <__config>
-{test_condition_begin}
+{lit_header_restrictions.get(header, '')}
+
 #include <{header}>
 {checks}
-{test_condition_end}
 """)
diff --git a/test/libcxx/modules_include.gen.py b/test/libcxx/modules_include.gen.py
index 0b9e67a..565def8 100644
--- a/test/libcxx/modules_include.gen.py
+++ b/test/libcxx/modules_include.gen.py
@@ -14,13 +14,10 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 for header in public_headers:
   BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
-  test_condition_begin = '#if ' + header_restrictions[header] if header in header_restrictions else ''
-  test_condition_end = '#endif' if header in header_restrictions else ''
-
   print(f"""\
 //--- {header}.compile.pass.cpp
 // RUN{BLOCKLIT}: %{{cxx}} %s %{{flags}} %{{compile_flags}} -fmodules -fcxx-modules -fmodules-cache-path=%t -fsyntax-only
@@ -38,8 +35,7 @@
 // TODO: Investigate this failure
 // UNSUPPORTED{BLOCKLIT}: LIBCXX-FREEBSD-FIXME
 
-#include <__config>
-{test_condition_begin}
+{lit_header_restrictions.get(header, '')}
+
 #include <{header}>
-{test_condition_end}
 """)
diff --git a/test/libcxx/nasty_macros.gen.py b/test/libcxx/nasty_macros.gen.py
index 3308b0b..3d3868f 100644
--- a/test/libcxx/nasty_macros.gen.py
+++ b/test/libcxx/nasty_macros.gen.py
@@ -13,14 +13,13 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 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 ''
-
   print(f"""\
 //--- {header}.compile.pass.cpp
+{lit_header_restrictions.get(header, '')}
+
 #define NASTY_MACRO This should not be expanded!!!
 
 // libc++ does not use single-letter names as a matter of principle.
@@ -150,8 +149,5 @@
 #define min NASTY_MACRO
 #define max NASTY_MACRO
 
-#include <__config>
-{test_condition_begin}
 #include <{header}>
-{test_condition_end}
 """)
diff --git a/test/libcxx/no_assert_include.gen.py b/test/libcxx/no_assert_include.gen.py
index 900cf3e..45152a3 100644
--- a/test/libcxx/no_assert_include.gen.py
+++ b/test/libcxx/no_assert_include.gen.py
@@ -13,23 +13,19 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 for header in public_headers:
   if header == 'cassert':
     continue
 
-  test_condition_begin = '#if ' + header_restrictions[header] if header in header_restrictions else ''
-  test_condition_end = '#endif' if header in header_restrictions else ''
-
   print(f"""\
 //--- {header}.compile.pass.cpp
+{lit_header_restrictions.get(header, '')}
 
-#include <__config>
-{test_condition_begin}
 #include <{header}>
+
 #ifdef assert
 # error "Do not include cassert or assert.h in standard header files"
 #endif
-{test_condition_end}
 """)
diff --git a/test/libcxx/private_headers.gen.py b/test/libcxx/private_headers.gen.py
index 541ce20..9091e62 100644
--- a/test/libcxx/private_headers.gen.py
+++ b/test/libcxx/private_headers.gen.py
@@ -13,7 +13,7 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, private_headers, private_headers_still_public_in_modules
+from libcxx.test.header_information import lit_header_restrictions, private_headers, private_headers_still_public_in_modules
 
 for header in private_headers:
   # Skip headers that are not private yet in the modulemap
@@ -32,16 +32,11 @@
   if header.startswith('__pstl'):
     continue
 
-  test_condition_begin = '#if ' + header_restrictions[header] if header in header_restrictions else ''
-  test_condition_end = '#endif' if header in header_restrictions else ''
   BLOCKLIT = '' # block Lit from interpreting a RUN/XFAIL/etc inside the generation script
-
   print(f"""\
 //--- {header}.verify.cpp
 // REQUIRES{BLOCKLIT}: modules-build
+{lit_header_restrictions.get(header, '')}
 
-#include <__config>
-{test_condition_begin}
 #include <{header}> // expected-error@*:* {{{{use of private header from outside its module: '{header}'}}}}
-{test_condition_end}
 """)
diff --git a/test/libcxx/transitive_includes.gen.py b/test/libcxx/transitive_includes.gen.py
index 94ba9a1..13f897b 100644
--- a/test/libcxx/transitive_includes.gen.py
+++ b/test/libcxx/transitive_includes.gen.py
@@ -20,7 +20,7 @@
 
 import sys
 sys.path.append(sys.argv[1])
-from libcxx.test.header_information import header_restrictions, public_headers
+from libcxx.test.header_information import lit_header_restrictions, public_headers
 
 import re
 
@@ -61,10 +61,10 @@
 
     print(f"""\
 //--- {header}.sh.cpp
+{lit_header_restrictions.get(header, '')}
 
-// This test doesn't support being run when some headers are not available, since we
-// would need to add significant complexity to make that work.
-// UNSUPPORTED{BLOCKLIT}: no-localization, no-threads, no-wide-characters, no-filesystem
+// TODO: Fix this test to make it work with filesystem, localization or wide characters disabled
+// UNSUPPORTED{BLOCKLIT}: no-filesystem, no-localization, no-wide-characters
 
 // When built with modules, this test doesn't work because --trace-includes doesn't
 // report the stack of includes correctly.
diff --git a/utils/libcxx/test/header_information.py b/utils/libcxx/test/header_information.py
index af182df..6ebfbb8 100644
--- a/utils/libcxx/test/header_information.py
+++ b/utils/libcxx/test/header_information.py
@@ -8,58 +8,6 @@
 
 import os, pathlib
 
-header_restrictions = {
-    "barrier": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "future": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "latch": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "mutex": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "semaphore": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "shared_mutex": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "stdatomic.h": "__cplusplus > 202002L && !defined(_LIBCPP_HAS_NO_THREADS)",
-    "stop_token": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "thread": "!defined(_LIBCPP_HAS_NO_THREADS)",
-    "filesystem": "!defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY)",
-    # TODO(LLVM-17): simplify this to __cplusplus >= 202002L
-    "coroutine": "(defined(__cpp_impl_coroutine) && __cpp_impl_coroutine >= 201902L) || (defined(__cpp_coroutines) && __cpp_coroutines >= 201703L)",
-    "clocale": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "codecvt": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "fstream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION) && !defined(_LIBCPP_HAS_NO_FSTREAM)",
-    "iomanip": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "ios": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "iostream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "istream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "locale.h": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "locale": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "ostream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "regex": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "sstream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "streambuf": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "strstream": "!defined(_LIBCPP_HAS_NO_LOCALIZATION)",
-    "wctype.h": "!defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)",
-    "cwctype": "!defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)",
-    "cwchar": "!defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)",
-    "wchar.h": "!defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS)",
-    "experimental/algorithm": "__cplusplus >= 201103L",
-    "experimental/deque": "__cplusplus >= 201103L",
-    "experimental/forward_list": "__cplusplus >= 201103L",
-    "experimental/functional": "__cplusplus >= 201103L",
-    "experimental/iterator": "__cplusplus >= 201103L",
-    "experimental/list": "__cplusplus >= 201103L",
-    "experimental/map": "__cplusplus >= 201103L",
-    "experimental/memory_resource": "__cplusplus >= 201103L",
-    "experimental/propagate_const": "__cplusplus >= 201103L",
-    "experimental/regex": "!defined(_LIBCPP_HAS_NO_LOCALIZATION) && __cplusplus >= 201103L",
-    "experimental/set": "__cplusplus >= 201103L",
-    "experimental/simd": "__cplusplus >= 201103L",
-    "experimental/span": "__cplusplus >= 201103L",
-    "experimental/string": "__cplusplus >= 201103L",
-    "experimental/type_traits": "__cplusplus >= 201103L",
-    "experimental/unordered_map": "__cplusplus >= 201103L",
-    "experimental/unordered_set": "__cplusplus >= 201103L",
-    "experimental/utility": "__cplusplus >= 201103L",
-    "experimental/vector": "__cplusplus >= 201103L",
-}
-
 lit_header_restrictions = {
     "barrier": "// UNSUPPORTED: no-threads, c++03, c++11, c++14, c++17",
     "stop_token": "// UNSUPPORTED: no-threads, c++03, c++11, c++14, c++17",