Skip to content

[libc++] Adds a FTM v2 data file generator. #134555

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

mordante
Copy link
Member

@mordante mordante commented Apr 6, 2025

This generator converts the existing data structure to the new JSON format. Next to adding the generator add the output of the tests in a new directory beneath the existing directory. This allows validating the output for the old and new tests. (These should be almost identical.)

This infrastructure allows using the new code and developing additional features without changing the existing work-flow. Then at some point we can switch from the old to the new version without a lot of additional manual work or merge conflicts.

The new files are generated by the normal libcxx-generate-files cmake target that is used to update the existing FTM macros.

Note the new code have no tests; the validation of the output and testing in the CI shows it works. This code will be removed in the future.

@mordante mordante requested a review from a team as a code owner April 6, 2025 17:56
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Apr 6, 2025
@llvmbot
Copy link
Member

llvmbot commented Apr 6, 2025

@llvm/pr-subscribers-libcxx

Author: Mark de Wever (mordante)

Changes

This generator converts the existing data structure to the new JSON format. Next to adding the generator add the output of the tests in a new directory beneath the existing directory. This allows validating the output for the old and new tests. (These should be almost identical.)

This infrastructure allows using the new code and developing additional features without changing the existing work-flow. Then at some point we can switch from the old to the new version without a lot of additional manual work or merge conflicts.

The new files are generated by the normal libcxx-generate-files cmake target that is used to update the existing FTM macros.

Note the new code have no tests; the validation of the output and testing in the CI shows it works. This code will be removed in the future.


Patch is 556.20 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/134555.diff

84 Files Affected:

  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp (+463)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp (+73)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp (+175)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp (+424)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp (+199)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp (+94)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp (+127)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp (+112)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp (+208)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp (+70)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp (+109)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp (+70)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp (+70)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp (+73)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp (+81)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp (+205)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp (+73)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp (+132)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp (+100)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp (+183)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp (+67)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp (+81)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp (+151)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp (+274)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp (+550)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp (+108)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp (+69)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp (+319)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp (+88)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp (+274)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp (+400)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp (+133)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp (+655)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp (+148)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp (+99)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp (+217)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp (+70)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp (+268)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp (+172)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp (+132)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp (+81)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp (+97)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp (+105)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp (+466)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp (+64)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp (+75)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp (+73)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp (+322)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp (+168)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp (+70)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp (+124)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp (+81)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp (+66)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp (+97)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp (+123)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp (+69)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp (+490)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp (+253)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp (+90)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp (+72)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp (+132)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp (+337)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp (+967)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp (+67)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp (+394)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp (+316)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp (+496)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp (+139)
  • (added) libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp (+274)
  • (added) libcxx/utils/data/feature_test_macro/data.json (+3000)
  • (modified) libcxx/utils/generate_feature_test_macro_components.py (+82-1)
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
new file mode 100644
index 0000000000000..2aa0ad30abfe7
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
@@ -0,0 +1,463 @@
+//===----------------------------------------------------------------------===//
+//
+// 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_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <algorithm>
+
+// Test the feature test macros defined by <algorithm>
+
+// clang-format off
+
+#include <algorithm>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_sample
+#    error "__cpp_lib_sample should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++14"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_sample
+#    error "__cpp_lib_sample should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++17"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++17"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++17"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++17"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++20"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++20"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++20"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++20"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++20"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++23"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++23"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_contains != 202207L
+#    error "__cpp_lib_ranges_contains should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_find_last != 202207L
+#    error "__cpp_lib_ranges_find_last should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_starts_ends_with != 202106L
+#    error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++23"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++23"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++23"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++26"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 202306L
+#    error "__cpp_lib_constexpr_algorithms should have the value 202306L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_algorithm
+#      error "__cpp_lib_freestanding_algorithm should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_algorithm != 202311L
+#      error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_algorithm
+#      error "__cpp_lib_freestanding_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++26"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_contains != 202207L
+#    error "__cpp_lib_ranges_contains should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_find_last != 202207L
+#    error "__cpp_lib_ranges_find_last should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_starts_ends_with != 202106L
+#    error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++26"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++26"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++26"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
new file mode 100644
index 0000000000000..46b66f19cda39
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
@@ -0,0 +1,73 @@
+//===----------------------------------------------------------------------===//
+//
+// 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_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <any>
+
+// Test the feature test macros defined by <any>
+
+// clang-format off
+
+#include <any>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_any
+#    error "__cpp_lib_any should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_any
+#    error "__cpp_lib_any should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++17"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++20"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++23"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++26"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
new file mode 100644
index 0000000000000..6992c42530c81
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
@@ -0,0 +1,175 @@
+//===----------------------------------------------------------------------===//
+//
+// 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_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <array>
+
+// Test the feature test macros defined by <array>
+
+// clang-format off
+
+#include <array>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_array
+#  ...
[truncated]

Copy link

github-actions bot commented Apr 6, 2025

⚠️ Python code formatter, darker found issues in your code. ⚠️

You can test this locally with the following command:
darker --check --diff -r HEAD~1...HEAD libcxx/test/libcxx/feature_test_macro/generate_header_test.sh.py libcxx/test/libcxx/feature_test_macro/implemented_standard_library_headers.sh.py libcxx/test/libcxx/feature_test_macro/standard_library_headers.sh.py libcxx/test/libcxx/feature_test_macro/ftm_metadata.sh.py libcxx/test/libcxx/feature_test_macro/implemented_ftms.sh.py libcxx/test/libcxx/feature_test_macro/standard_ftms.sh.py libcxx/test/libcxx/feature_test_macro/version_header.sh.py libcxx/test/libcxx/feature_test_macro/version_header_implementation.sh.py libcxx/utils/generate_feature_test_macro_components.py
View the diff from darker here.
--- utils/generate_feature_test_macro_components.py	2025-04-12 13:01:07.000000 +0000
+++ utils/generate_feature_test_macro_components.py	2025-04-12 18:09:17.312665 +0000
@@ -1956,40 +1956,52 @@
 
     table_doc_path = os.path.join(docs_path, "FeatureTestMacroTable.rst")
     with open(table_doc_path, "w", newline="\n") as f:
         f.write(doc_str)
 
+
 def get_values(tc) -> str:
     implemented = True if not "unimplemented" in tc.keys() else not tc["unimplemented"]
 
-    return ",\n".join("""\
+    return ",\n".join(
+        """\
       "{std}": {{
         "{value}": [
           {{
             "implemented": {implemented}
           }}
         ]
       }}\
-""".format(std=key, value=tc["values"][key], implemented="true" if implemented else "false") for key in tc["values"].keys())
+""".format(
+            std=key,
+            value=tc["values"][key],
+            implemented="true" if implemented else "false",
+        )
+        for key in tc["values"].keys()
+    )
+
 
 def get_headers(tc) -> str:
     headers = tc["headers"]
     headers.remove("version")
-    return f'{headers}'.replace("'", '"')
+    return f"{headers}".replace("'", '"')
+
 
 def get_test_suite_guard(tc) -> str:
     if not "test_suite_guard" in tc.keys():
         return ""
     return f',\n    "test_suite_guard": "{tc["test_suite_guard"]}"'
 
+
 def get_libcxx_guard(tc) -> str:
     if not "libcxx_guard" in tc.keys():
         return ""
     return f',\n    "libcxx_guard": "{tc["libcxx_guard"]}"'
 
+
 def get_ftm_json(tc) -> str:
-    data="""\
+    data = """\
   {{
     "name": "{ftm}",
     "values": {{
 {values}
     }},
@@ -2012,11 +2024,13 @@
 def produce_json(file: os.path) -> None:
     contents = """\
 [
 {data}
 ]
-""".format(data=get_json())
+""".format(
+        data=get_json()
+    )
     with open(file, "w", newline="\n") as f:
         f.write(contents)
 
 
 Std = NewType("Std", str)  # Standard version number
@@ -2133,10 +2147,11 @@
             )
         )
 
     return "\n\n".join(result)
 
+
 #
 # The templates used to create a FTM test file
 #
 
 
@@ -2399,16 +2414,17 @@
                         assert (
                             len(papers) > 0
                         ), f"{feature['name']}[{std}][{value}] has no entries"
                         for paper in papers:
                             if paper["implemented"]:
-                                for header in self.ftm_metadata[feature["name"]].headers:
+                                for header in self.ftm_metadata[
+                                    feature["name"]
+                                ].headers:
                                     result.add(header)
                                 break
 
         return result
-
 
     def is_implemented(self, ftm: Ftm, std: Std) -> bool:
         """Has the FTM `ftm` been implemented in the dialect `std`?"""
 
         # When a paper for C++20 has not been implemented in libc++, then there will be no
@@ -2528,11 +2544,10 @@
                     )
                 )
 
         return result
 
-
     def generate_header_test_ftm(self, std: Std, ftm: Ftm, value: FtmHeaderTest) -> str:
         """Adds a single `ftm` test for C++ `std` based on the status information in `value`.
 
         When std == None this test is generating the TEST_STD_VER < MIN. Where
         MIN is the minimum version that has a FTM defined. (In the real data
@@ -2567,11 +2582,11 @@
             self.generate_header_test_ftm(std, ftm, value)
             for element in data
             for ftm, value in element.items()
         )
 
-    def generate_lit_markup(self, header:str) -> str:
+    def generate_lit_markup(self, header: str) -> str:
         if not header in lit_markup.keys():
             return ""
 
         return "\n".join(f"// {markup}" for markup in lit_markup[header]) + "\n\n"
 

Copy link

github-actions bot commented Apr 6, 2025

⚠️ C/C++ code formatter, clang-format found issues in your code. ⚠️

You can test this locally with the following command:
git-clang-format --diff HEAD~1 HEAD --extensions cpp -- libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
View the diff from clang-format here.
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
index 488bc468b..bc479f1bc 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
@@ -459,4 +459,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
index 7f3d63947..fe0e6bd17 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
@@ -69,4 +69,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
index 9e50976e5..30efb6189 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
@@ -171,4 +171,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
index e6145bbed..3470e2b28 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
@@ -420,4 +420,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
index 0d0259237..a908c417d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
index 35033419a..cad025eee 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
@@ -195,4 +195,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
index ea61d9973..8799a1f7d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
@@ -90,4 +90,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
index 52b02562d..6ec3037c9 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
@@ -123,4 +123,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
index 1453938b0..d5d7a5da4 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
@@ -108,4 +108,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
index 507c7ab60..26ebe1e3a 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
@@ -204,4 +204,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
index 56759a88a..907535a08 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
@@ -66,4 +66,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
index b5efa984b..9a3a644ca 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
@@ -105,4 +105,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
index d9b2c43ec..e4058c234 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
@@ -66,4 +66,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
index b472b205f..24a9eca1e 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
@@ -66,4 +66,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
index ccc034418..bc65a7f3c 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
@@ -69,4 +69,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
index c18680e00..34d9d9400 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
@@ -77,4 +77,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
index 0e48d440c..8653004ed 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
index fd59250a0..ea1ebb536 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
index eff8689be..b634f3253 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
@@ -201,4 +201,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
index 60d6418c7..11d573500 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
@@ -69,4 +69,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
index 1259f592f..65412eedf 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
@@ -128,4 +128,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
index d58f726f6..8bd2b9c44 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
@@ -96,4 +96,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
index 98acf8bb6..9c28db3bb 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
@@ -179,4 +179,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
index 19e2fd79a..9c06eee27 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
@@ -63,4 +63,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
index d078f9bda..5985bdc2d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
@@ -63,4 +63,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
index 3fa433414..77730f17f 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
@@ -147,4 +147,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
index 31b3e900a..07110f285 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
@@ -270,4 +270,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
index ee32346d6..f67adb0de 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
index 8dbbbf432..e0e85e833 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
@@ -546,4 +546,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
index f94fa8f98..f02c8b26b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
index bc069df7d..de55a8d34 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
index 37deba7c9..4de327cbf 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
@@ -104,4 +104,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
index 179c3ce06..68816936c 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
@@ -65,4 +65,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
index 46238896f..a1178b227 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
index 75dcb18a5..e9805ed4b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
@@ -315,4 +315,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
index 6857c5446..8e105648b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
index 0b3d6f5d2..f4cc8db0f 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
@@ -84,4 +84,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
index 0845e9022..086e7ec99 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
index 9fd638087..fc2145b78 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
@@ -270,4 +270,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
index e1a04d1b0..f51688165 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
index 4044c2b1b..3db3861c7 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
@@ -396,4 +396,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
index 28524438f..572a8371a 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
@@ -129,4 +129,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
index fc70df3ae..7945a5de2 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
@@ -651,4 +651,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
index 52fc2d185..dddf473f8 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
@@ -144,4 +144,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
index fb3734fff..5ffa5df88 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
@@ -95,4 +95,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
index b1de3f762..3797e0966 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
@@ -213,4 +213,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
index e8f109610..27170d1ea 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
@@ -66,4 +66,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
index 687c343e3..cafbd2cac 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
@@ -252,4 +252,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
index f8ff69f61..6bd221d8d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
@@ -168,4 +168,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
index de0520af1..163ea5b55 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
@@ -128,4 +128,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
index 263d20ace..0382d93cb 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
@@ -77,4 +77,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
index 6aff89ae3..0811f041c 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
@@ -93,4 +93,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
index 17283bd36..6faf507df 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
@@ -101,4 +101,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
index c7c8112e1..995ffd1ee 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
@@ -462,4 +462,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
index 6507e1c68..b7c08fe0d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
@@ -60,4 +60,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
index 20caf8386..972d72f59 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
index d6acf35d6..dc27dc918 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
@@ -71,4 +71,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
index 4246f2515..9dc2d8b87 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
@@ -69,4 +69,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
index fd0f0c51e..c9cae7340 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
index 80eae6e1f..5dc69f29d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
@@ -318,4 +318,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
index 4392173eb..51feff219 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
@@ -164,4 +164,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
index 2b326e2b3..9495e3195 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
@@ -66,4 +66,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
index 3c550e0fa..826471a65 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
@@ -120,4 +120,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
index 16611e131..6fdbb8aa8 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
@@ -77,4 +77,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
index b7650c436..992e31ed6 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
@@ -62,4 +62,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
index 1e530ccc3..61c5ed476 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
@@ -93,4 +93,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
index 2d686546c..a5238655a 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
@@ -119,4 +119,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
index 113ffce2a..c07d93510 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
@@ -65,4 +65,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
index ac70b0c21..6f6c4bbbd 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
index 40a6c0708..7236d5d7f 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
@@ -486,4 +486,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
index bda523614..c7bafb0bf 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
@@ -249,4 +249,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
index 0eaf9f1af..589b9ba5a 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
@@ -86,4 +86,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
index 3fe3f33fa..85497990e 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
@@ -68,4 +68,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
index e6c44a223..a2a81a619 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
@@ -128,4 +128,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
index f4a2fd8b2..2af5f2cee 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
@@ -333,4 +333,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
index 45c51b580..fb34e9fe6 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
@@ -963,4 +963,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
index 0729b0b37..cf29080ea 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
@@ -63,4 +63,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
index 74b3c8fff..221d8aaeb 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
@@ -390,4 +390,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
index 9c400ddd2..d1c1335df 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
@@ -312,4 +312,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
index e0a83c781..3710effaf 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
@@ -492,4 +492,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
index dc4af4d09..569d5427b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
@@ -135,4 +135,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
index c2513ecad..e34800a89 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
@@ -270,4 +270,3 @@
 #endif // TEST_STD_VER > 23
 
 // clang-format on
-

ftm = FeatureTestMacros(
os.path.join(source_root, "utils", "data", "feature_test_macro", "data.json")
)
ftm.generate_header_test_directory(os.path.join(macro_test_path, "v2"))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For reference ee96014 overwrites the existing files and contains the diff of the existing files.

Note the new way adds a few additional files that are not in the current tests. For example, rcu is a header we have not yet implemented.

@mordante mordante force-pushed the users/mordante/ftm/update_existing_tests branch from 1afa959 to bbdb0a0 Compare April 11, 2025 18:38
Base automatically changed from users/mordante/ftm/update_existing_tests to main April 12, 2025 12:20
This generator has almost identical output to the existing script.
Notable differences are
- conditionally include not yet implemented headers
- removes the synopsis
- uses 2 spaces indent in `# if`

There are a few more test macros added that triggered bugs in existing
FTM.
This generator converts the existing data structure to the new JSON
format. Next to adding the generator add the output of the tests in a
new directory beneath the existing directory. This allows validating the
output for the old and new tests. (These should be almost identical.)

This infrastructure allows using the new code and developing additional
features without changing the existing work-flow. Then at some point we
can switch from the old to the new version without a lot of additional
manual work or merge conflicts.

The new files are generated by the normal libcxx-generate-files cmake
target that is used to update the existing FTM macros.

Note the new code have no tests; the validation of the output and
testing in the CI shows it works. This code will be removed in the
future.
@mordante mordante force-pushed the users/mordante/ftm/adds_data_convertor branch from 4ef5a85 to e13d520 Compare April 12, 2025 18:07
@mordante mordante changed the base branch from main to users/mordante/ftm/generate_header_tests April 12, 2025 18:07
@mordante mordante force-pushed the users/mordante/ftm/generate_header_tests branch from 446fd9c to d2f630d Compare May 18, 2025 12:09
Base automatically changed from users/mordante/ftm/generate_header_tests to main May 18, 2025 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants