Skip to content

[libc++] Format the code base #74334

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

Merged
merged 1 commit into from
Dec 18, 2023
Merged

Conversation

ldionne
Copy link
Member

@ldionne ldionne commented Dec 4, 2023

This patch runs clang-format on all of libcxx/include and libcxx/src, in accordance with the RFC discussed at 1. Follow-up patches will format the benchmarks, the test suite and remaining parts of the code. I'm splitting this one into its own patch so the diff is a bit easier to review.

This patch was generated with:

find libcxx/include libcxx/src -type f \
   | grep -v 'module.modulemap.in' \
   | grep -v 'CMakeLists.txt' \
   | grep -v 'README.txt' \
   | grep -v 'libcxx.imp' \
   | grep -v '__config_site.in' \
   | xargs clang-format -i

A Git merge driver is available in libcxx/utils/clang-format-merge-driver.sh
to help resolve merge and rebase issues across these formatting changes.

@ldionne ldionne requested a review from a team as a code owner December 4, 2023 16:03
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Dec 4, 2023
@llvmbot
Copy link
Member

llvmbot commented Dec 4, 2023

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

Changes

This patch runs clang-format on all of libcxx/include and libcxx/src, in accordance with the RFC discussed at 1. Follow-up patches will format the benchmarks, the test suite and remaining parts of the code. I'm splitting this one into its own patch so the diff is a bit easier to review.

This patch was generated with:

find libcxx/include libcxx/src -type f | grep -v 'module.modulemap.in' | grep -v 'CMakeLists.txt' | grep -v 'README.txt' | xargs clang-format -i


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

549 Files Affected:

  • (added) .gitattributes (+142)
  • (modified) libcxx/include/__algorithm/binary_search.h (+7-13)
  • (modified) libcxx/include/__algorithm/comp_ref_type.h (+28-38)
  • (modified) libcxx/include/__algorithm/copy_backward.h (+6-10)
  • (modified) libcxx/include/__algorithm/copy_if.h (+9-14)
  • (modified) libcxx/include/__algorithm/copy_move_common.h (+11-14)
  • (modified) libcxx/include/__algorithm/copy_n.h (+29-30)
  • (modified) libcxx/include/__algorithm/equal.h (+23-6)
  • (modified) libcxx/include/__algorithm/equal_range.h (+4-7)
  • (modified) libcxx/include/__algorithm/fill.h (+10-16)
  • (modified) libcxx/include/__algorithm/fill_n.h (+8-12)
  • (modified) libcxx/include/__algorithm/find_end.h (+45-47)
  • (modified) libcxx/include/__algorithm/find_first_of.h (+12-9)
  • (modified) libcxx/include/__algorithm/for_each_n.h (+2-3)
  • (modified) libcxx/include/__algorithm/generate.h (+4-6)
  • (modified) libcxx/include/__algorithm/generate_n.h (+7-9)
  • (modified) libcxx/include/__algorithm/half_positive.h (+4-10)
  • (modified) libcxx/include/__algorithm/in_found_result.h (+1-1)
  • (modified) libcxx/include/__algorithm/in_fun_result.h (+1-1)
  • (modified) libcxx/include/__algorithm/in_in_out_result.h (+6-8)
  • (modified) libcxx/include/__algorithm/in_in_result.h (+2-4)
  • (modified) libcxx/include/__algorithm/in_out_out_result.h (+6-8)
  • (modified) libcxx/include/__algorithm/in_out_result.h (+3-5)
  • (modified) libcxx/include/__algorithm/includes.h (+18-13)
  • (modified) libcxx/include/__algorithm/inplace_merge.h (+144-160)
  • (modified) libcxx/include/__algorithm/is_heap.h (+7-13)
  • (modified) libcxx/include/__algorithm/is_heap_until.h (+26-30)
  • (modified) libcxx/include/__algorithm/is_partitioned.h (+10-11)
  • (modified) libcxx/include/__algorithm/is_permutation.h (+121-56)
  • (modified) libcxx/include/__algorithm/is_sorted.h (+7-13)
  • (modified) libcxx/include/__algorithm/is_sorted_until.h (+14-19)
  • (modified) libcxx/include/__algorithm/iter_swap.h (+1-2)
  • (modified) libcxx/include/__algorithm/iterator_operations.h (+30-37)
  • (modified) libcxx/include/__algorithm/lexicographical_compare.h (+23-26)
  • (modified) libcxx/include/__algorithm/lower_bound.h (+7-8)
  • (modified) libcxx/include/__algorithm/make_heap.h (+8-8)
  • (modified) libcxx/include/__algorithm/make_projected.h (+20-27)
  • (modified) libcxx/include/__algorithm/max.h (+13-26)
  • (modified) libcxx/include/__algorithm/max_element.h (+14-19)
  • (modified) libcxx/include/__algorithm/merge.h (+33-32)
  • (modified) libcxx/include/__algorithm/min.h (+13-26)
  • (modified) libcxx/include/__algorithm/min_element.h (+10-13)
  • (modified) libcxx/include/__algorithm/min_max_result.h (+1-1)
  • (modified) libcxx/include/__algorithm/minmax.h (+19-29)
  • (modified) libcxx/include/__algorithm/minmax_element.h (+15-16)
  • (modified) libcxx/include/__algorithm/mismatch.h (+12-13)
  • (modified) libcxx/include/__algorithm/move.h (+1-2)
  • (modified) libcxx/include/__algorithm/move_backward.h (+3-3)
  • (modified) libcxx/include/__algorithm/next_permutation.h (+27-34)
  • (modified) libcxx/include/__algorithm/nth_element.h (+184-202)
  • (modified) libcxx/include/__algorithm/partial_sort.h (+15-24)
  • (modified) libcxx/include/__algorithm/partial_sort_copy.h (+54-40)
  • (modified) libcxx/include/__algorithm/partition.h (+36-48)
  • (modified) libcxx/include/__algorithm/partition_copy.h (+16-20)
  • (modified) libcxx/include/__algorithm/partition_point.h (+15-19)
  • (modified) libcxx/include/__algorithm/pop_heap.h (+10-8)
  • (modified) libcxx/include/__algorithm/prev_permutation.h (+28-36)
  • (modified) libcxx/include/__algorithm/push_heap.h (+13-11)
  • (modified) libcxx/include/__algorithm/remove.h (+11-15)
  • (modified) libcxx/include/__algorithm/remove_copy.h (+8-12)
  • (modified) libcxx/include/__algorithm/remove_copy_if.h (+8-12)
  • (modified) libcxx/include/__algorithm/remove_if.h (+11-15)
  • (modified) libcxx/include/__algorithm/replace.h (+5-7)
  • (modified) libcxx/include/__algorithm/replace_copy.h (+12-11)
  • (modified) libcxx/include/__algorithm/replace_copy_if.h (+12-11)
  • (modified) libcxx/include/__algorithm/replace_if.h (+5-7)
  • (modified) libcxx/include/__algorithm/reverse.h (+16-24)
  • (modified) libcxx/include/__algorithm/reverse_copy.h (+5-7)
  • (modified) libcxx/include/__algorithm/rotate.h (+118-146)
  • (modified) libcxx/include/__algorithm/rotate_copy.h (+3-5)
  • (modified) libcxx/include/__algorithm/sample.h (+46-35)
  • (modified) libcxx/include/__algorithm/search.h (+55-68)
  • (modified) libcxx/include/__algorithm/search_n.h (+34-62)
  • (modified) libcxx/include/__algorithm/set_difference.h (+1-1)
  • (modified) libcxx/include/__algorithm/shift_left.h (+21-22)
  • (modified) libcxx/include/__algorithm/shift_right.h (+61-62)
  • (modified) libcxx/include/__algorithm/shuffle.h (+60-67)
  • (modified) libcxx/include/__algorithm/sift_down.h (+70-71)
  • (modified) libcxx/include/__algorithm/sort.h (+143-102)
  • (modified) libcxx/include/__algorithm/sort_heap.h (+8-8)
  • (modified) libcxx/include/__algorithm/stable_partition.h (+230-257)
  • (modified) libcxx/include/__algorithm/stable_sort.h (+160-172)
  • (modified) libcxx/include/__algorithm/swap_ranges.h (+3-6)
  • (modified) libcxx/include/__algorithm/transform.h (+14-15)
  • (modified) libcxx/include/__algorithm/uniform_random_bit_generator_adaptor.h (+5-9)
  • (modified) libcxx/include/__algorithm/unwrap_iter.h (+5-5)
  • (modified) libcxx/include/__atomic/atomic.h (+339-473)
  • (modified) libcxx/include/__atomic/atomic_base.h (+147-174)
  • (modified) libcxx/include/__atomic/atomic_flag.h (+88-158)
  • (modified) libcxx/include/__atomic/atomic_lock_free.h (+26-26)
  • (modified) libcxx/include/__atomic/atomic_sync.h (+43-47)
  • (modified) libcxx/include/__atomic/check_memory_order.h (+9-13)
  • (modified) libcxx/include/__atomic/contention_t.h (+2-2)
  • (modified) libcxx/include/__atomic/cxx_atomic_impl.h (+254-306)
  • (modified) libcxx/include/__atomic/fence.h (+3-13)
  • (modified) libcxx/include/__atomic/kill_dependency.h (+2-4)
  • (modified) libcxx/include/__atomic/memory_order.h (+2-9)
  • (modified) libcxx/include/__availability (+82-68)
  • (modified) libcxx/include/__bit/bit_cast.h (+1-2)
  • (modified) libcxx/include/__bit/bit_ceil.h (+1-1)
  • (modified) libcxx/include/__bit/byteswap.h (+5-6)
  • (modified) libcxx/include/__bit/countl.h (+41-43)
  • (modified) libcxx/include/__bit/countr.h (+10-7)
  • (modified) libcxx/include/__bit/endian.h (+1-1)
  • (modified) libcxx/include/__bit/popcount.h (+9-6)
  • (modified) libcxx/include/__chrono/calendar.h (+6-6)
  • (modified) libcxx/include/__chrono/convert_to_timespec.h (+5-10)
  • (modified) libcxx/include/__chrono/day.h (+53-38)
  • (modified) libcxx/include/__chrono/duration.h (+320-373)
  • (modified) libcxx/include/__chrono/file_clock.h (+10-14)
  • (modified) libcxx/include/__chrono/formatter.h (+27-36)
  • (modified) libcxx/include/__chrono/hh_mm_ss.h (+53-58)
  • (modified) libcxx/include/__chrono/high_resolution_clock.h (+1-2)
  • (modified) libcxx/include/__chrono/literals.h (+10-14)
  • (modified) libcxx/include/__chrono/month.h (+53-41)
  • (modified) libcxx/include/__chrono/month_weekday.h (+56-48)
  • (modified) libcxx/include/__chrono/monthday.h (+67-64)
  • (modified) libcxx/include/__chrono/steady_clock.h (+8-10)
  • (modified) libcxx/include/__chrono/system_clock.h (+11-13)
  • (modified) libcxx/include/__chrono/time_point.h (+81-105)
  • (modified) libcxx/include/__chrono/weekday.h (+106-95)
  • (modified) libcxx/include/__chrono/year.h (+60-44)
  • (modified) libcxx/include/__chrono/year_month.h (+62-49)
  • (modified) libcxx/include/__chrono/year_month_day.h (+256-204)
  • (modified) libcxx/include/__chrono/year_month_weekday.h (+205-164)
  • (modified) libcxx/include/__compare/common_comparison_category.h (+9-18)
  • (modified) libcxx/include/__compare/compare_partial_order_fallback.h (+35-33)
  • (modified) libcxx/include/__compare/compare_strong_order_fallback.h (+32-30)
  • (modified) libcxx/include/__compare/compare_three_way.h (+9-10)
  • (modified) libcxx/include/__compare/compare_three_way_result.h (+12-11)
  • (modified) libcxx/include/__compare/compare_weak_order_fallback.h (+32-30)
  • (modified) libcxx/include/__compare/ordering.h (+58-106)
  • (modified) libcxx/include/__compare/partial_order.h (+32-31)
  • (modified) libcxx/include/__compare/strong_order.h (+86-87)
  • (modified) libcxx/include/__compare/three_way_comparable.h (+16-20)
  • (modified) libcxx/include/__compare/weak_order.h (+57-58)
  • (modified) libcxx/include/__config (+2-2)
  • (modified) libcxx/include/__config_site.in (+5-6)
  • (modified) libcxx/include/__coroutine/coroutine_handle.h (+116-141)
  • (modified) libcxx/include/__coroutine/coroutine_traits.h (+2-7)
  • (modified) libcxx/include/__coroutine/noop_coroutine_handle.h (+45-58)
  • (modified) libcxx/include/__coroutine/trivial_awaitables.h (+6-12)
  • (modified) libcxx/include/__debug_utils/randomize_range.h (+1-2)
  • (modified) libcxx/include/__expected/expected.h (+84-121)
  • (modified) libcxx/include/__filesystem/copy_options.h (+20-30)
  • (modified) libcxx/include/__filesystem/directory_entry.h (+81-170)
  • (modified) libcxx/include/__filesystem/directory_iterator.h (+25-48)
  • (modified) libcxx/include/__filesystem/directory_options.h (+12-32)
  • (modified) libcxx/include/__filesystem/file_status.h (+10-18)
  • (modified) libcxx/include/__filesystem/file_type.h (+7-7)
  • (modified) libcxx/include/__filesystem/operations.h (+167-57)
  • (modified) libcxx/include/__filesystem/path.h (+242-410)
  • (modified) libcxx/include/__filesystem/path_iterator.h (+17-33)
  • (modified) libcxx/include/__filesystem/perm_options.h (+12-27)
  • (modified) libcxx/include/__filesystem/perms.h (+23-33)
  • (modified) libcxx/include/__filesystem/recursive_directory_iterator.h (+31-54)
  • (modified) libcxx/include/__filesystem/u8path.h (+21-27)
  • (modified) libcxx/include/__format/buffer.h (+20-20)
  • (modified) libcxx/include/__format/concepts.h (+1-1)
  • (modified) libcxx/include/__format/escaped_output_table.h (+100-893)
  • (modified) libcxx/include/__format/extended_grapheme_cluster_table.h (+167-1496)
  • (modified) libcxx/include/__format/format_arg.h (+13-19)
  • (modified) libcxx/include/__format/format_arg_store.h (+7-7)
  • (modified) libcxx/include/__format/format_args.h (+2-3)
  • (modified) libcxx/include/__format/format_context.h (+29-43)
  • (modified) libcxx/include/__format/format_error.h (+7-10)
  • (modified) libcxx/include/__format/format_functions.h (+87-94)
  • (modified) libcxx/include/__format/format_parse_context.h (+11-19)
  • (modified) libcxx/include/__format/format_string.h (+6-14)
  • (modified) libcxx/include/__format/formatter.h (+2-2)
  • (modified) libcxx/include/__format/formatter_floating_point.h (+41-51)
  • (modified) libcxx/include/__format/formatter_integer.h (+13-24)
  • (modified) libcxx/include/__format/formatter_integral.h (+25-19)
  • (modified) libcxx/include/__format/formatter_output.h (+6-4)
  • (modified) libcxx/include/__format/formatter_pointer.h (+3-6)
  • (modified) libcxx/include/__format/formatter_string.h (+8-10)
  • (modified) libcxx/include/__format/parser_std_format_spec.h (+40-39)
  • (modified) libcxx/include/__format/unicode.h (+4-6)
  • (modified) libcxx/include/__format/write_escaped.h (+9-10)
  • (modified) libcxx/include/__functional/binary_function.h (+8-8)
  • (modified) libcxx/include/__functional/binary_negate.h (+13-12)
  • (modified) libcxx/include/__functional/bind.h (+164-223)
  • (modified) libcxx/include/__functional/bind_back.h (+22-12)
  • (modified) libcxx/include/__functional/bind_front.h (+10-11)
  • (modified) libcxx/include/__functional/binder1st.h (+18-17)
  • (modified) libcxx/include/__functional/binder2nd.h (+18-17)
  • (modified) libcxx/include/__functional/boyer_moore_searcher.h (+57-71)
  • (modified) libcxx/include/__functional/compose.h (+15-12)
  • (modified) libcxx/include/__functional/default_searcher.h (+14-17)
  • (modified) libcxx/include/__functional/function.h (+725-922)
  • (modified) libcxx/include/__functional/hash.h (+271-411)
  • (modified) libcxx/include/__functional/identity.h (+5-6)
  • (modified) libcxx/include/__functional/invoke.h (+14-16)
  • (modified) libcxx/include/__functional/is_transparent.h (+1-2)
  • (modified) libcxx/include/__functional/mem_fn.h (+16-20)
  • (modified) libcxx/include/__functional/mem_fun_ref.h (+78-105)
  • (modified) libcxx/include/__functional/not_fn.h (+11-14)
  • (modified) libcxx/include/__functional/operations.h (+237-303)
  • (modified) libcxx/include/__functional/perfect_forward.h (+25-23)
  • (modified) libcxx/include/__functional/pointer_to_binary_function.h (+9-11)
  • (modified) libcxx/include/__functional/pointer_to_unary_function.h (+9-11)
  • (modified) libcxx/include/__functional/ranges_operations.h (+12-12)
  • (modified) libcxx/include/__functional/reference_wrapper.h (+44-53)
  • (modified) libcxx/include/__functional/unary_function.h (+6-6)
  • (modified) libcxx/include/__functional/unary_negate.h (+13-12)
  • (modified) libcxx/include/__functional/weak_result_type.h (+81-144)
  • (modified) libcxx/include/__fwd/get.h (+16-32)
  • (modified) libcxx/include/__fwd/span.h (+2-1)
  • (modified) libcxx/include/__fwd/string_view.h (+4-4)
  • (modified) libcxx/include/__fwd/subrange.h (+1-1)
  • (modified) libcxx/include/__hash_table (+1353-1861)
  • (modified) libcxx/include/__ios/fpos.h (+3-6)
  • (modified) libcxx/include/__iterator/access.h (+21-46)
  • (modified) libcxx/include/__iterator/advance.h (+26-31)
  • (modified) libcxx/include/__iterator/back_insert_iterator.h (+30-23)
  • (modified) libcxx/include/__iterator/common_iterator.h (+102-109)
  • (modified) libcxx/include/__iterator/concepts.h (+145-193)
  • (modified) libcxx/include/__iterator/counted_iterator.h (+80-111)
  • (modified) libcxx/include/__iterator/data.h (+15-17)
  • (modified) libcxx/include/__iterator/default_sentinel.h (+1-1)
  • (modified) libcxx/include/__iterator/distance.h (+20-29)
  • (modified) libcxx/include/__iterator/empty.h (+10-9)
  • (modified) libcxx/include/__iterator/erase_if_container.h (+1-3)
  • (modified) libcxx/include/__iterator/front_insert_iterator.h (+29-22)
  • (modified) libcxx/include/__iterator/incrementable_traits.h (+17-16)
  • (modified) libcxx/include/__iterator/indirectly_comparable.h (+1-2)
  • (modified) libcxx/include/__iterator/insert_iterator.h (+33-24)
  • (modified) libcxx/include/__iterator/istream_iterator.h (+45-50)
  • (modified) libcxx/include/__iterator/istreambuf_iterator.h (+60-71)
  • (modified) libcxx/include/__iterator/iter_move.h (+31-37)
  • (modified) libcxx/include/__iterator/iter_swap.h (+43-56)
  • (modified) libcxx/include/__iterator/iterator.h (+7-9)
  • (modified) libcxx/include/__iterator/iterator_traits.h (+186-211)
  • (modified) libcxx/include/__iterator/mergeable.h (+8-7)
  • (modified) libcxx/include/__iterator/move_iterator.h (+203-216)
  • (modified) libcxx/include/__iterator/move_sentinel.h (+9-12)
  • (modified) libcxx/include/__iterator/next.h (+5-8)
  • (modified) libcxx/include/__iterator/ostream_iterator.h (+29-26)
  • (modified) libcxx/include/__iterator/ostreambuf_iterator.h (+28-33)
  • (modified) libcxx/include/__iterator/permutable.h (+1-2)
  • (modified) libcxx/include/__iterator/prev.h (+5-8)
  • (modified) libcxx/include/__iterator/readable_traits.h (+23-23)
  • (modified) libcxx/include/__iterator/reverse_access.h (+20-40)
  • (modified) libcxx/include/__iterator/reverse_iterator.h (+175-191)
  • (modified) libcxx/include/__iterator/size.h (+16-16)
  • (modified) libcxx/include/__iterator/sortable.h (+1-3)
  • (modified) libcxx/include/__iterator/unreachable_sentinel.h (+2-3)
  • (modified) libcxx/include/__iterator/wrap_iter.h (+122-136)
  • (modified) libcxx/include/__locale (+1096-1338)
  • (modified) libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h (+14-14)
  • (modified) libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h (+61-83)
  • (modified) libcxx/include/__locale_dir/locale_base_api/locale_guard.h (+33-34)
  • (modified) libcxx/include/__mbstate_t.h (+8-8)
  • (modified) libcxx/include/__memory/addressof.h (+10-25)
  • (modified) libcxx/include/__memory/aligned_alloc.h (+20-22)
  • (modified) libcxx/include/__memory/allocate_at_least.h (+5-5)
  • (modified) libcxx/include/__memory/allocation_guard.h (+45-53)
  • (modified) libcxx/include/__memory/allocator.h (+160-171)
  • (modified) libcxx/include/__memory/allocator_arg_t.h (+20-25)
  • (modified) libcxx/include/__memory/allocator_destructor.h (+11-13)
  • (modified) libcxx/include/__memory/allocator_traits.h (+185-194)
  • (modified) libcxx/include/__memory/assume_aligned.h (+1-2)
  • (modified) libcxx/include/__memory/auto_ptr.h (+51-43)
  • (modified) libcxx/include/__memory/builtin_new_allocator.h (+10-13)
  • (modified) libcxx/include/__memory/compressed_pair.h (+35-46)
  • (modified) libcxx/include/__memory/concepts.h (+4-11)
  • (modified) libcxx/include/__memory/construct_at.h (+29-36)
  • (modified) libcxx/include/__memory/destruct_n.h (+30-31)
  • (modified) libcxx/include/__memory/pointer_traits.h (+86-88)
  • (modified) libcxx/include/__memory/ranges_construct_at.h (+11-17)
  • (modified) libcxx/include/__memory/ranges_uninitialized_algorithms.h (+43-46)
  • (modified) libcxx/include/__memory/raw_storage_iterator.h (+39-27)
  • (modified) libcxx/include/__memory/shared_ptr.h (+1027-1468)
  • (modified) libcxx/include/__memory/temp_value.h (+17-15)
  • (modified) libcxx/include/__memory/temporary_buffer.h (+34-44)
  • (modified) libcxx/include/__memory/uninitialized_algorithms.h (+224-237)
  • (modified) libcxx/include/__memory/unique_ptr.h (+143-230)
  • (modified) libcxx/include/__memory/uses_allocator.h (+10-17)
  • (modified) libcxx/include/__node_handle (+87-137)
  • (modified) libcxx/include/__numeric/accumulate.h (+12-16)
  • (modified) libcxx/include/__numeric/adjacent_difference.h (+24-33)
  • (modified) libcxx/include/__numeric/exclusive_scan.h (+1-1)
  • (modified) libcxx/include/__numeric/gcd_lcm.h (+36-46)
  • (modified) libcxx/include/__numeric/inclusive_scan.h (+4-5)
  • (modified) libcxx/include/__numeric/inner_product.h (+17-17)
  • (modified) libcxx/include/__numeric/iota.h (+4-6)
  • (modified) libcxx/include/__numeric/midpoint.h (+29-34)
  • (modified) libcxx/include/__numeric/partial_sum.h (+22-31)
  • (modified) libcxx/include/__numeric/reduce.h (+4-4)
  • (modified) libcxx/include/__numeric/transform_exclusive_scan.h (+13-20)
  • (modified) libcxx/include/__numeric/transform_inclusive_scan.h (+18-24)
  • (modified) libcxx/include/__numeric/transform_reduce.h (+13-12)
  • (modified) libcxx/include/__random/bernoulli_distribution.h (+69-91)
  • (modified) libcxx/include/__random/binomial_distribution.h (+130-161)
  • (modified) libcxx/include/__random/cauchy_distribution.h (+83-111)
  • (modified) libcxx/include/__random/chi_squared_distribution.h (+69-92)
  • (modified) libcxx/include/__random/clamp_to_integral.h (+11-11)
  • (modified) libcxx/include/__random/discard_block_engine.h (+113-143)
  • (modified) libcxx/include/__random/discrete_distribution.h (+144-196)
  • (modified) libcxx/include/__random/exponential_distribution.h (+72-100)
  • (modified) libcxx/include/__random/extreme_value_distribution.h (+84-112)
  • (modified) libcxx/include/__random/fisher_f_distribution.h (+83-111)
  • (modified) libcxx/include/__random/gamma_distribution.h (+121-159)
  • (modified) libcxx/include/__random/generate_canonical.h (+13-15)
  • (modified) libcxx/include/__random/geometric_distribution.h (+67-90)
  • (modified) libcxx/include/__random/independent_bits_engine.h (+139-192)
  • (modified) libcxx/include/__random/is_seed_sequence.h (+3-5)
  • (modified) libcxx/include/__random/is_valid.h (+34-19)
  • (modified) libcxx/include/__random/linear_congruential_engine.h (+211-280)
  • (modified) libcxx/include/__random/log2.h (+17-22)
  • (modified) libcxx/include/__random/lognormal_distribution.h (+75-114)
  • (modified) libcxx/include/__random/mersenne_twister_engine.h (+813-411)
  • (modified) libcxx/include/__random/negative_binomial_distribution.h (+102-130)
  • (modified) libcxx/include/__random/normal_distribution.h (+120-158)
  • (modified) libcxx/include/__random/piecewise_constant_distribution.h (+224-284)
  • (modified) libcxx/include/__random/piecewise_linear_distribution.h (+238-300)
  • (modified) libcxx/include/__random/poisson_distribution.h (+176-216)
  • (modified) libcxx/include/__random/random_device.h (+42-45)
  • (modified) libcxx/include/__random/ranlux.h (+1-1)
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000..6b281f33f737d
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,142 @@
+libcxx/src/**/*.cpp     merge=libcxx-reformat
+libcxx/include/**/*.h   merge=libcxx-reformat
+
+# Explicitly handle files with no extension
+libcxx/include/__availability               merge=libcxx-reformat
+libcxx/include/__bit_reference              merge=libcxx-reformat
+libcxx/include/__config                     merge=libcxx-reformat
+libcxx/include/__hash_table                 merge=libcxx-reformat
+libcxx/include/__locale                     merge=libcxx-reformat
+libcxx/include/__node_handle                merge=libcxx-reformat
+libcxx/include/__split_buffer               merge=libcxx-reformat
+libcxx/include/__std_clang_module           merge=libcxx-reformat
+libcxx/include/__threading_support          merge=libcxx-reformat
+libcxx/include/__tree                       merge=libcxx-reformat
+libcxx/include/__verbose_abort              merge=libcxx-reformat
+libcxx/include/algorithm                    merge=libcxx-reformat
+libcxx/include/any                          merge=libcxx-reformat
+libcxx/include/array                        merge=libcxx-reformat
+libcxx/include/atomic                       merge=libcxx-reformat
+libcxx/include/barrier                      merge=libcxx-reformat
+libcxx/include/bit                          merge=libcxx-reformat
+libcxx/include/bitset                       merge=libcxx-reformat
+libcxx/include/cassert                      merge=libcxx-reformat
+libcxx/include/ccomplex                     merge=libcxx-reformat
+libcxx/include/cctype                       merge=libcxx-reformat
+libcxx/include/cerrno                       merge=libcxx-reformat
+libcxx/include/cfenv                        merge=libcxx-reformat
+libcxx/include/cfloat                       merge=libcxx-reformat
+libcxx/include/charconv                     merge=libcxx-reformat
+libcxx/include/chrono                       merge=libcxx-reformat
+libcxx/include/cinttypes                    merge=libcxx-reformat
+libcxx/include/ciso646                      merge=libcxx-reformat
+libcxx/include/climits                      merge=libcxx-reformat
+libcxx/include/clocale                      merge=libcxx-reformat
+libcxx/include/cmath                        merge=libcxx-reformat
+libcxx/include/codecvt                      merge=libcxx-reformat
+libcxx/include/compare                      merge=libcxx-reformat
+libcxx/include/complex                      merge=libcxx-reformat
+libcxx/include/concepts                     merge=libcxx-reformat
+libcxx/include/condition_variable           merge=libcxx-reformat
+libcxx/include/coroutine                    merge=libcxx-reformat
+libcxx/include/csetjmp                      merge=libcxx-reformat
+libcxx/include/csignal                      merge=libcxx-reformat
+libcxx/include/cstdarg                      merge=libcxx-reformat
+libcxx/include/cstdbool                     merge=libcxx-reformat
+libcxx/include/cstddef                      merge=libcxx-reformat
+libcxx/include/cstdint                      merge=libcxx-reformat
+libcxx/include/cstdio                       merge=libcxx-reformat
+libcxx/include/cstdlib                      merge=libcxx-reformat
+libcxx/include/cstring                      merge=libcxx-reformat
+libcxx/include/ctgmath                      merge=libcxx-reformat
+libcxx/include/ctime                        merge=libcxx-reformat
+libcxx/include/cuchar                       merge=libcxx-reformat
+libcxx/include/cwchar                       merge=libcxx-reformat
+libcxx/include/cwctype                      merge=libcxx-reformat
+libcxx/include/deque                        merge=libcxx-reformat
+libcxx/include/exception                    merge=libcxx-reformat
+libcxx/include/execution                    merge=libcxx-reformat
+libcxx/include/expected                     merge=libcxx-reformat
+libcxx/include/experimental/__config        merge=libcxx-reformat
+libcxx/include/experimental/__memory        merge=libcxx-reformat
+libcxx/include/experimental/deque           merge=libcxx-reformat
+libcxx/include/experimental/forward_list    merge=libcxx-reformat
+libcxx/include/experimental/iterator        merge=libcxx-reformat
+libcxx/include/experimental/list            merge=libcxx-reformat
+libcxx/include/experimental/map             merge=libcxx-reformat
+libcxx/include/experimental/memory          merge=libcxx-reformat
+libcxx/include/experimental/memory_resource merge=libcxx-reformat
+libcxx/include/experimental/propagate_const merge=libcxx-reformat
+libcxx/include/experimental/regex           merge=libcxx-reformat
+libcxx/include/experimental/set             merge=libcxx-reformat
+libcxx/include/experimental/simd            merge=libcxx-reformat
+libcxx/include/experimental/string          merge=libcxx-reformat
+libcxx/include/experimental/type_traits     merge=libcxx-reformat
+libcxx/include/experimental/unordered_map   merge=libcxx-reformat
+libcxx/include/experimental/unordered_set   merge=libcxx-reformat
+libcxx/include/experimental/utility         merge=libcxx-reformat
+libcxx/include/experimental/vector          merge=libcxx-reformat
+libcxx/include/ext/__hash                   merge=libcxx-reformat
+libcxx/include/ext/hash_map                 merge=libcxx-reformat
+libcxx/include/ext/hash_set                 merge=libcxx-reformat
+libcxx/include/filesystem                   merge=libcxx-reformat
+libcxx/include/format                       merge=libcxx-reformat
+libcxx/include/forward_list                 merge=libcxx-reformat
+libcxx/include/fstream                      merge=libcxx-reformat
+libcxx/include/functional                   merge=libcxx-reformat
+libcxx/include/future                       merge=libcxx-reformat
+libcxx/include/initializer_list             merge=libcxx-reformat
+libcxx/include/iomanip                      merge=libcxx-reformat
+libcxx/include/ios                          merge=libcxx-reformat
+libcxx/include/iosfwd                       merge=libcxx-reformat
+libcxx/include/iostream                     merge=libcxx-reformat
+libcxx/include/istream                      merge=libcxx-reformat
+libcxx/include/iterator                     merge=libcxx-reformat
+libcxx/include/latch                        merge=libcxx-reformat
+libcxx/include/limits                       merge=libcxx-reformat
+libcxx/include/list                         merge=libcxx-reformat
+libcxx/include/locale                       merge=libcxx-reformat
+libcxx/include/map                          merge=libcxx-reformat
+libcxx/include/mdspan                       merge=libcxx-reformat
+libcxx/include/memory                       merge=libcxx-reformat
+libcxx/include/memory_resource              merge=libcxx-reformat
+libcxx/include/mutex                        merge=libcxx-reformat
+libcxx/include/new                          merge=libcxx-reformat
+libcxx/include/numbers                      merge=libcxx-reformat
+libcxx/include/numeric                      merge=libcxx-reformat
+libcxx/include/optional                     merge=libcxx-reformat
+libcxx/include/ostream                      merge=libcxx-reformat
+libcxx/include/print                        merge=libcxx-reformat
+libcxx/include/queue                        merge=libcxx-reformat
+libcxx/include/random                       merge=libcxx-reformat
+libcxx/include/ranges                       merge=libcxx-reformat
+libcxx/include/ratio                        merge=libcxx-reformat
+libcxx/include/regex                        merge=libcxx-reformat
+libcxx/include/scoped_allocator             merge=libcxx-reformat
+libcxx/include/semaphore                    merge=libcxx-reformat
+libcxx/include/set                          merge=libcxx-reformat
+libcxx/include/shared_mutex                 merge=libcxx-reformat
+libcxx/include/source_location              merge=libcxx-reformat
+libcxx/include/span                         merge=libcxx-reformat
+libcxx/include/sstream                      merge=libcxx-reformat
+libcxx/include/stack                        merge=libcxx-reformat
+libcxx/include/stdexcept                    merge=libcxx-reformat
+libcxx/include/stop_token                   merge=libcxx-reformat
+libcxx/include/streambuf                    merge=libcxx-reformat
+libcxx/include/string                       merge=libcxx-reformat
+libcxx/include/string_view                  merge=libcxx-reformat
+libcxx/include/strstream                    merge=libcxx-reformat
+libcxx/include/syncstream                   merge=libcxx-reformat
+libcxx/include/system_error                 merge=libcxx-reformat
+libcxx/include/thread                       merge=libcxx-reformat
+libcxx/include/tuple                        merge=libcxx-reformat
+libcxx/include/type_traits                  merge=libcxx-reformat
+libcxx/include/typeindex                    merge=libcxx-reformat
+libcxx/include/typeinfo                     merge=libcxx-reformat
+libcxx/include/unordered_map                merge=libcxx-reformat
+libcxx/include/unordered_set                merge=libcxx-reformat
+libcxx/include/utility                      merge=libcxx-reformat
+libcxx/include/valarray                     merge=libcxx-reformat
+libcxx/include/variant                      merge=libcxx-reformat
+libcxx/include/vector                       merge=libcxx-reformat
+libcxx/include/version                      merge=libcxx-reformat
diff --git a/libcxx/include/__algorithm/binary_search.h b/libcxx/include/__algorithm/binary_search.h
index 5a1d49f5f43e2..7a77d7b5447bd 100644
--- a/libcxx/include/__algorithm/binary_search.h
+++ b/libcxx/include/__algorithm/binary_search.h
@@ -22,22 +22,16 @@
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _ForwardIterator, class _Tp, class _Compare>
-_LIBCPP_NODISCARD_EXT inline
-_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
-bool
-binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp)
-{
-    __first = std::lower_bound<_ForwardIterator, _Tp, __comp_ref_type<_Compare> >(__first, __last, __value, __comp);
-    return __first != __last && !__comp(__value, *__first);
+_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
+binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) {
+  __first = std::lower_bound<_ForwardIterator, _Tp, __comp_ref_type<_Compare> >(__first, __last, __value, __comp);
+  return __first != __last && !__comp(__value, *__first);
 }
 
 template <class _ForwardIterator, class _Tp>
-_LIBCPP_NODISCARD_EXT inline
-_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
-bool
-binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
-{
-    return std::binary_search(__first, __last, __value, __less<>());
+_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
+binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) {
+  return std::binary_search(__first, __last, __value, __less<>());
 }
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/__algorithm/comp_ref_type.h b/libcxx/include/__algorithm/comp_ref_type.h
index 2797e9da66585..15f4a535a30bf 100644
--- a/libcxx/include/__algorithm/comp_ref_type.h
+++ b/libcxx/include/__algorithm/comp_ref_type.h
@@ -20,52 +20,42 @@
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _Compare>
-struct __debug_less
-{
-    _Compare &__comp_;
-    _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI __debug_less(_Compare& __c) : __comp_(__c) {}
+struct __debug_less {
+  _Compare& __comp_;
+  _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI __debug_less(_Compare& __c) : __comp_(__c) {}
 
-    template <class _Tp, class _Up>
-    _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI
-    bool operator()(const _Tp& __x,  const _Up& __y)
-    {
-        bool __r = __comp_(__x, __y);
-        if (__r)
-            __do_compare_assert(0, __y, __x);
-        return __r;
-    }
+  template <class _Tp, class _Up>
+  _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Up& __y) {
+    bool __r = __comp_(__x, __y);
+    if (__r)
+      __do_compare_assert(0, __y, __x);
+    return __r;
+  }
 
-    template <class _Tp, class _Up>
-    _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI
-    bool operator()(_Tp& __x,  _Up& __y)
-    {
-        bool __r = __comp_(__x, __y);
-        if (__r)
-            __do_compare_assert(0, __y, __x);
-        return __r;
-    }
+  template <class _Tp, class _Up>
+  _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(_Tp& __x, _Up& __y) {
+    bool __r = __comp_(__x, __y);
+    if (__r)
+      __do_compare_assert(0, __y, __x);
+    return __r;
+  }
 
-    template <class _LHS, class _RHS>
-    _LIBCPP_CONSTEXPR_SINCE_CXX14
-    inline _LIBCPP_HIDE_FROM_ABI
-    decltype((void)std::declval<_Compare&>()(
-        std::declval<_LHS &>(), std::declval<_RHS &>()))
-    __do_compare_assert(int, _LHS & __l, _RHS & __r) {
-        _LIBCPP_ASSERT_UNCATEGORIZED(!__comp_(__l, __r),
-            "Comparator does not induce a strict weak ordering");
-        (void)__l;
-        (void)__r;
-    }
+  template <class _LHS, class _RHS>
+  _LIBCPP_CONSTEXPR_SINCE_CXX14 inline _LIBCPP_HIDE_FROM_ABI decltype((void)std::declval<_Compare&>()(
+      std::declval<_LHS&>(), std::declval<_RHS&>()))
+  __do_compare_assert(int, _LHS& __l, _RHS& __r) {
+    _LIBCPP_ASSERT_UNCATEGORIZED(!__comp_(__l, __r), "Comparator does not induce a strict weak ordering");
+    (void)__l;
+    (void)__r;
+  }
 
-    template <class _LHS, class _RHS>
-    _LIBCPP_CONSTEXPR_SINCE_CXX14
-    inline _LIBCPP_HIDE_FROM_ABI
-    void __do_compare_assert(long, _LHS &, _RHS &) {}
+  template <class _LHS, class _RHS>
+  _LIBCPP_CONSTEXPR_SINCE_CXX14 inline _LIBCPP_HIDE_FROM_ABI void __do_compare_assert(long, _LHS&, _RHS&) {}
 };
 
 // Pass the comparator by lvalue reference. Or in debug mode, using a
 // debugging wrapper that stores a reference.
-#  if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG
+#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG
 template <class _Comp>
 using __comp_ref_type = __debug_less<_Comp>;
 #else
diff --git a/libcxx/include/__algorithm/copy_backward.h b/libcxx/include/__algorithm/copy_backward.h
index d85d297b3226c..3ec88d8bd5cc3 100644
--- a/libcxx/include/__algorithm/copy_backward.h
+++ b/libcxx/include/__algorithm/copy_backward.h
@@ -108,8 +108,7 @@ struct __copy_backward_loop {
 
 struct __copy_backward_trivial {
   // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer.
-  template <class _In, class _Out,
-            __enable_if_t<__can_lower_copy_assignment_to_memmove<_In, _Out>::value, int> = 0>
+  template <class _In, class _Out, __enable_if_t<__can_lower_copy_assignment_to_memmove<_In, _Out>::value, int> = 0>
   _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*>
   operator()(_In* __first, _In* __last, _Out* __result) const {
     return std::__copy_backward_trivial_impl(__first, __last, __result);
@@ -124,16 +123,13 @@ __copy_backward(_BidirectionalIterator1 __first, _Sentinel __last, _Bidirectiona
 }
 
 template <class _BidirectionalIterator1, class _BidirectionalIterator2>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
-_BidirectionalIterator2
-copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last,
-              _BidirectionalIterator2 __result)
-{
+inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _BidirectionalIterator2
+copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) {
   static_assert(std::is_copy_constructible<_BidirectionalIterator1>::value &&
-                std::is_copy_constructible<_BidirectionalIterator1>::value, "Iterators must be copy constructible.");
+                    std::is_copy_constructible<_BidirectionalIterator1>::value,
+                "Iterators must be copy constructible.");
 
-  return std::__copy_backward<_ClassicAlgPolicy>(
-      std::move(__first), std::move(__last), std::move(__result)).second;
+  return std::__copy_backward<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second;
 }
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/__algorithm/copy_if.h b/libcxx/include/__algorithm/copy_if.h
index d68d1dbbadf8a..228e4d22323e3 100644
--- a/libcxx/include/__algorithm/copy_if.h
+++ b/libcxx/include/__algorithm/copy_if.h
@@ -17,21 +17,16 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-template<class _InputIterator, class _OutputIterator, class _Predicate>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20
-_OutputIterator
-copy_if(_InputIterator __first, _InputIterator __last,
-        _OutputIterator __result, _Predicate __pred)
-{
-    for (; __first != __last; ++__first)
-    {
-        if (__pred(*__first))
-        {
-            *__result = *__first;
-            ++__result;
-        }
+template <class _InputIterator, class _OutputIterator, class _Predicate>
+inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator
+copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) {
+  for (; __first != __last; ++__first) {
+    if (__pred(*__first)) {
+      *__result = *__first;
+      ++__result;
     }
-    return __result;
+  }
+  return __result;
 }
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/__algorithm/copy_move_common.h b/libcxx/include/__algorithm/copy_move_common.h
index c06892e9e3c79..b350507e32bae 100644
--- a/libcxx/include/__algorithm/copy_move_common.h
+++ b/libcxx/include/__algorithm/copy_move_common.h
@@ -38,22 +38,19 @@ _LIBCPP_BEGIN_NAMESPACE_STD
 template <class _From, class _To>
 struct __can_lower_copy_assignment_to_memmove {
   static const bool value =
-    // If the types are always bitcastable, it's valid to do a bitwise copy between them.
-    __is_always_bitcastable<_From, _To>::value &&
-    // Reject conversions that wouldn't be performed by the regular built-in assignment (e.g. between arrays).
-    is_trivially_assignable<_To&, const _From&>::value &&
-    // `memmove` doesn't accept `volatile` pointers, make sure the optimization SFINAEs away in that case.
-    !is_volatile<_From>::value &&
-    !is_volatile<_To>::value;
+      // If the types are always bitcastable, it's valid to do a bitwise copy between them.
+      __is_always_bitcastable<_From, _To>::value &&
+      // Reject conversions that wouldn't be performed by the regular built-in assignment (e.g. between arrays).
+      is_trivially_assignable<_To&, const _From&>::value &&
+      // `memmove` doesn't accept `volatile` pointers, make sure the optimization SFINAEs away in that case.
+      !is_volatile<_From>::value && !is_volatile<_To>::value;
 };
 
 template <class _From, class _To>
 struct __can_lower_move_assignment_to_memmove {
   static const bool value =
-    __is_always_bitcastable<_From, _To>::value &&
-    is_trivially_assignable<_To&, _From&&>::value &&
-    !is_volatile<_From>::value &&
-    !is_volatile<_To>::value;
+      __is_always_bitcastable<_From, _To>::value && is_trivially_assignable<_To&, _From&&>::value &&
+      !is_volatile<_From>::value && !is_volatile<_To>::value;
 };
 
 // `memmove` algorithms implementation.
@@ -95,8 +92,8 @@ struct __can_rewrap<_InIter,
                     _Sent,
                     _OutIter,
                     // Note that sentinels are always copy-constructible.
-                    __enable_if_t< is_copy_constructible<_InIter>::value &&
-                                   is_copy_constructible<_OutIter>::value > > : true_type {};
+                    __enable_if_t< is_copy_constructible<_InIter>::value && is_copy_constructible<_OutIter>::value > >
+    : true_type {};
 
 template <class _Algorithm,
           class _InIter,
@@ -108,7 +105,7 @@ __unwrap_and_dispatch(_InIter __first, _Sent __last, _OutIter __out_first) {
   auto __range  = std::__unwrap_range(__first, std::move(__last));
   auto __result = _Algorithm()(std::move(__range.first), std::move(__range.second), std::__unwrap_iter(__out_first));
   return std::make_pair(std::__rewrap_range<_Sent>(std::move(__first), std::move(__result.first)),
-                     ...
[truncated]

@ldionne
Copy link
Member Author

ldionne commented Dec 4, 2023

I know some parts will need clang-format off / on, let's iterate on that before we merge the PR.

@ldionne
Copy link
Member Author

ldionne commented Dec 4, 2023

CC @llvm/libcxx-vendors

Copy link

github-actions bot commented Dec 4, 2023

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

You can test this locally with the following command:
git-clang-format --diff 4f54d71501815877898aaa6d764b8468d0708ed6 fd4d116446c948e1e822e12440cccd14c889f1ca -- libcxx/include/__algorithm/binary_search.h libcxx/include/__algorithm/comp_ref_type.h libcxx/include/__algorithm/copy_backward.h libcxx/include/__algorithm/copy_if.h libcxx/include/__algorithm/copy_move_common.h libcxx/include/__algorithm/copy_n.h libcxx/include/__algorithm/equal.h libcxx/include/__algorithm/equal_range.h libcxx/include/__algorithm/fill.h libcxx/include/__algorithm/fill_n.h libcxx/include/__algorithm/find_end.h libcxx/include/__algorithm/find_first_of.h libcxx/include/__algorithm/for_each_n.h libcxx/include/__algorithm/generate.h libcxx/include/__algorithm/generate_n.h libcxx/include/__algorithm/half_positive.h libcxx/include/__algorithm/in_found_result.h libcxx/include/__algorithm/in_fun_result.h libcxx/include/__algorithm/in_in_out_result.h libcxx/include/__algorithm/in_in_result.h libcxx/include/__algorithm/in_out_out_result.h libcxx/include/__algorithm/in_out_result.h libcxx/include/__algorithm/includes.h libcxx/include/__algorithm/inplace_merge.h libcxx/include/__algorithm/is_heap.h libcxx/include/__algorithm/is_heap_until.h libcxx/include/__algorithm/is_partitioned.h libcxx/include/__algorithm/is_permutation.h libcxx/include/__algorithm/is_sorted.h libcxx/include/__algorithm/is_sorted_until.h libcxx/include/__algorithm/iter_swap.h libcxx/include/__algorithm/iterator_operations.h libcxx/include/__algorithm/lexicographical_compare.h libcxx/include/__algorithm/lower_bound.h libcxx/include/__algorithm/make_heap.h libcxx/include/__algorithm/make_projected.h libcxx/include/__algorithm/max.h libcxx/include/__algorithm/max_element.h libcxx/include/__algorithm/merge.h libcxx/include/__algorithm/min.h libcxx/include/__algorithm/min_element.h libcxx/include/__algorithm/min_max_result.h libcxx/include/__algorithm/minmax.h libcxx/include/__algorithm/minmax_element.h libcxx/include/__algorithm/mismatch.h libcxx/include/__algorithm/move.h libcxx/include/__algorithm/move_backward.h libcxx/include/__algorithm/next_permutation.h libcxx/include/__algorithm/nth_element.h libcxx/include/__algorithm/partial_sort.h libcxx/include/__algorithm/partial_sort_copy.h libcxx/include/__algorithm/partition.h libcxx/include/__algorithm/partition_copy.h libcxx/include/__algorithm/partition_point.h libcxx/include/__algorithm/pop_heap.h libcxx/include/__algorithm/prev_permutation.h libcxx/include/__algorithm/push_heap.h libcxx/include/__algorithm/remove.h libcxx/include/__algorithm/remove_copy.h libcxx/include/__algorithm/remove_copy_if.h libcxx/include/__algorithm/remove_if.h libcxx/include/__algorithm/replace.h libcxx/include/__algorithm/replace_copy.h libcxx/include/__algorithm/replace_copy_if.h libcxx/include/__algorithm/replace_if.h libcxx/include/__algorithm/reverse.h libcxx/include/__algorithm/reverse_copy.h libcxx/include/__algorithm/rotate.h libcxx/include/__algorithm/rotate_copy.h libcxx/include/__algorithm/sample.h libcxx/include/__algorithm/search.h libcxx/include/__algorithm/search_n.h libcxx/include/__algorithm/set_difference.h libcxx/include/__algorithm/shift_left.h libcxx/include/__algorithm/shift_right.h libcxx/include/__algorithm/shuffle.h libcxx/include/__algorithm/sift_down.h libcxx/include/__algorithm/sort.h libcxx/include/__algorithm/sort_heap.h libcxx/include/__algorithm/stable_partition.h libcxx/include/__algorithm/stable_sort.h libcxx/include/__algorithm/swap_ranges.h libcxx/include/__algorithm/transform.h libcxx/include/__algorithm/uniform_random_bit_generator_adaptor.h libcxx/include/__algorithm/unwrap_iter.h libcxx/include/__atomic/atomic.h libcxx/include/__atomic/atomic_base.h libcxx/include/__atomic/atomic_flag.h libcxx/include/__atomic/atomic_lock_free.h libcxx/include/__atomic/atomic_sync.h libcxx/include/__atomic/check_memory_order.h libcxx/include/__atomic/contention_t.h libcxx/include/__atomic/cxx_atomic_impl.h libcxx/include/__atomic/fence.h libcxx/include/__atomic/kill_dependency.h libcxx/include/__atomic/memory_order.h libcxx/include/__availability libcxx/include/__bit/bit_cast.h libcxx/include/__bit/bit_ceil.h libcxx/include/__bit/byteswap.h libcxx/include/__bit/countl.h libcxx/include/__bit/countr.h libcxx/include/__bit/endian.h libcxx/include/__bit/popcount.h libcxx/include/__chrono/calendar.h libcxx/include/__chrono/convert_to_timespec.h libcxx/include/__chrono/day.h libcxx/include/__chrono/duration.h libcxx/include/__chrono/file_clock.h libcxx/include/__chrono/formatter.h libcxx/include/__chrono/hh_mm_ss.h libcxx/include/__chrono/high_resolution_clock.h libcxx/include/__chrono/literals.h libcxx/include/__chrono/month.h libcxx/include/__chrono/month_weekday.h libcxx/include/__chrono/monthday.h libcxx/include/__chrono/steady_clock.h libcxx/include/__chrono/system_clock.h libcxx/include/__chrono/time_point.h libcxx/include/__chrono/weekday.h libcxx/include/__chrono/year.h libcxx/include/__chrono/year_month.h libcxx/include/__chrono/year_month_day.h libcxx/include/__chrono/year_month_weekday.h libcxx/include/__compare/common_comparison_category.h libcxx/include/__compare/compare_partial_order_fallback.h libcxx/include/__compare/compare_strong_order_fallback.h libcxx/include/__compare/compare_three_way.h libcxx/include/__compare/compare_three_way_result.h libcxx/include/__compare/compare_weak_order_fallback.h libcxx/include/__compare/ordering.h libcxx/include/__compare/partial_order.h libcxx/include/__compare/strong_order.h libcxx/include/__compare/three_way_comparable.h libcxx/include/__compare/weak_order.h libcxx/include/__config libcxx/include/__coroutine/coroutine_handle.h libcxx/include/__coroutine/coroutine_traits.h libcxx/include/__coroutine/noop_coroutine_handle.h libcxx/include/__coroutine/trivial_awaitables.h libcxx/include/__debug_utils/randomize_range.h libcxx/include/__expected/expected.h libcxx/include/__filesystem/copy_options.h libcxx/include/__filesystem/directory_entry.h libcxx/include/__filesystem/directory_iterator.h libcxx/include/__filesystem/directory_options.h libcxx/include/__filesystem/file_status.h libcxx/include/__filesystem/file_type.h libcxx/include/__filesystem/operations.h libcxx/include/__filesystem/path.h libcxx/include/__filesystem/path_iterator.h libcxx/include/__filesystem/perm_options.h libcxx/include/__filesystem/perms.h libcxx/include/__filesystem/recursive_directory_iterator.h libcxx/include/__filesystem/u8path.h libcxx/include/__format/buffer.h libcxx/include/__format/concepts.h libcxx/include/__format/format_arg.h libcxx/include/__format/format_arg_store.h libcxx/include/__format/format_args.h libcxx/include/__format/format_context.h libcxx/include/__format/format_error.h libcxx/include/__format/format_functions.h libcxx/include/__format/format_parse_context.h libcxx/include/__format/format_string.h libcxx/include/__format/formatter.h libcxx/include/__format/formatter_floating_point.h libcxx/include/__format/formatter_integer.h libcxx/include/__format/formatter_integral.h libcxx/include/__format/formatter_output.h libcxx/include/__format/formatter_pointer.h libcxx/include/__format/formatter_string.h libcxx/include/__format/parser_std_format_spec.h libcxx/include/__format/unicode.h libcxx/include/__format/write_escaped.h libcxx/include/__functional/binary_function.h libcxx/include/__functional/binary_negate.h libcxx/include/__functional/bind.h libcxx/include/__functional/bind_back.h libcxx/include/__functional/bind_front.h libcxx/include/__functional/binder1st.h libcxx/include/__functional/binder2nd.h libcxx/include/__functional/boyer_moore_searcher.h libcxx/include/__functional/compose.h libcxx/include/__functional/default_searcher.h libcxx/include/__functional/function.h libcxx/include/__functional/hash.h libcxx/include/__functional/identity.h libcxx/include/__functional/invoke.h libcxx/include/__functional/is_transparent.h libcxx/include/__functional/mem_fn.h libcxx/include/__functional/mem_fun_ref.h libcxx/include/__functional/not_fn.h libcxx/include/__functional/operations.h libcxx/include/__functional/perfect_forward.h libcxx/include/__functional/pointer_to_binary_function.h libcxx/include/__functional/pointer_to_unary_function.h libcxx/include/__functional/ranges_operations.h libcxx/include/__functional/reference_wrapper.h libcxx/include/__functional/unary_function.h libcxx/include/__functional/unary_negate.h libcxx/include/__functional/weak_result_type.h libcxx/include/__fwd/get.h libcxx/include/__fwd/span.h libcxx/include/__fwd/string_view.h libcxx/include/__fwd/subrange.h libcxx/include/__hash_table libcxx/include/__ios/fpos.h libcxx/include/__iterator/access.h libcxx/include/__iterator/advance.h libcxx/include/__iterator/back_insert_iterator.h libcxx/include/__iterator/common_iterator.h libcxx/include/__iterator/concepts.h libcxx/include/__iterator/counted_iterator.h libcxx/include/__iterator/data.h libcxx/include/__iterator/default_sentinel.h libcxx/include/__iterator/distance.h libcxx/include/__iterator/empty.h libcxx/include/__iterator/erase_if_container.h libcxx/include/__iterator/front_insert_iterator.h libcxx/include/__iterator/incrementable_traits.h libcxx/include/__iterator/indirectly_comparable.h libcxx/include/__iterator/insert_iterator.h libcxx/include/__iterator/istream_iterator.h libcxx/include/__iterator/istreambuf_iterator.h libcxx/include/__iterator/iter_move.h libcxx/include/__iterator/iter_swap.h libcxx/include/__iterator/iterator.h libcxx/include/__iterator/iterator_traits.h libcxx/include/__iterator/mergeable.h libcxx/include/__iterator/move_iterator.h libcxx/include/__iterator/move_sentinel.h libcxx/include/__iterator/next.h libcxx/include/__iterator/ostream_iterator.h libcxx/include/__iterator/ostreambuf_iterator.h libcxx/include/__iterator/permutable.h libcxx/include/__iterator/prev.h libcxx/include/__iterator/readable_traits.h libcxx/include/__iterator/reverse_access.h libcxx/include/__iterator/reverse_iterator.h libcxx/include/__iterator/size.h libcxx/include/__iterator/sortable.h libcxx/include/__iterator/unreachable_sentinel.h libcxx/include/__iterator/wrap_iter.h libcxx/include/__locale libcxx/include/__locale_dir/locale_base_api/bsd_locale_defaults.h libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h libcxx/include/__locale_dir/locale_base_api/locale_guard.h libcxx/include/__mbstate_t.h libcxx/include/__memory/addressof.h libcxx/include/__memory/aligned_alloc.h libcxx/include/__memory/allocate_at_least.h libcxx/include/__memory/allocation_guard.h libcxx/include/__memory/allocator.h libcxx/include/__memory/allocator_arg_t.h libcxx/include/__memory/allocator_destructor.h libcxx/include/__memory/allocator_traits.h libcxx/include/__memory/assume_aligned.h libcxx/include/__memory/auto_ptr.h libcxx/include/__memory/builtin_new_allocator.h libcxx/include/__memory/compressed_pair.h libcxx/include/__memory/concepts.h libcxx/include/__memory/construct_at.h libcxx/include/__memory/destruct_n.h libcxx/include/__memory/pointer_traits.h libcxx/include/__memory/ranges_construct_at.h libcxx/include/__memory/ranges_uninitialized_algorithms.h libcxx/include/__memory/raw_storage_iterator.h libcxx/include/__memory/shared_ptr.h libcxx/include/__memory/temp_value.h libcxx/include/__memory/temporary_buffer.h libcxx/include/__memory/uninitialized_algorithms.h libcxx/include/__memory/unique_ptr.h libcxx/include/__memory/uses_allocator.h libcxx/include/__node_handle libcxx/include/__numeric/accumulate.h libcxx/include/__numeric/adjacent_difference.h libcxx/include/__numeric/exclusive_scan.h libcxx/include/__numeric/gcd_lcm.h libcxx/include/__numeric/inclusive_scan.h libcxx/include/__numeric/inner_product.h libcxx/include/__numeric/iota.h libcxx/include/__numeric/midpoint.h libcxx/include/__numeric/partial_sum.h libcxx/include/__numeric/reduce.h libcxx/include/__numeric/transform_exclusive_scan.h libcxx/include/__numeric/transform_inclusive_scan.h libcxx/include/__numeric/transform_reduce.h libcxx/include/__random/bernoulli_distribution.h libcxx/include/__random/binomial_distribution.h libcxx/include/__random/cauchy_distribution.h libcxx/include/__random/chi_squared_distribution.h libcxx/include/__random/clamp_to_integral.h libcxx/include/__random/discard_block_engine.h libcxx/include/__random/discrete_distribution.h libcxx/include/__random/exponential_distribution.h libcxx/include/__random/extreme_value_distribution.h libcxx/include/__random/fisher_f_distribution.h libcxx/include/__random/gamma_distribution.h libcxx/include/__random/generate_canonical.h libcxx/include/__random/geometric_distribution.h libcxx/include/__random/independent_bits_engine.h libcxx/include/__random/is_seed_sequence.h libcxx/include/__random/is_valid.h libcxx/include/__random/linear_congruential_engine.h libcxx/include/__random/log2.h libcxx/include/__random/lognormal_distribution.h libcxx/include/__random/mersenne_twister_engine.h libcxx/include/__random/negative_binomial_distribution.h libcxx/include/__random/normal_distribution.h libcxx/include/__random/piecewise_constant_distribution.h libcxx/include/__random/piecewise_linear_distribution.h libcxx/include/__random/poisson_distribution.h libcxx/include/__random/random_device.h libcxx/include/__random/ranlux.h libcxx/include/__random/seed_seq.h libcxx/include/__random/shuffle_order_engine.h libcxx/include/__random/student_t_distribution.h libcxx/include/__random/subtract_with_carry_engine.h libcxx/include/__random/uniform_int_distribution.h libcxx/include/__random/uniform_random_bit_generator.h libcxx/include/__random/uniform_real_distribution.h libcxx/include/__random/weibull_distribution.h libcxx/include/__ranges/access.h libcxx/include/__ranges/all.h libcxx/include/__ranges/common_view.h libcxx/include/__ranges/concepts.h libcxx/include/__ranges/counted.h libcxx/include/__ranges/data.h libcxx/include/__ranges/drop_view.h libcxx/include/__ranges/empty.h libcxx/include/__ranges/empty_view.h libcxx/include/__ranges/enable_view.h libcxx/include/__ranges/filter_view.h libcxx/include/__ranges/iota_view.h libcxx/include/__ranges/istream_view.h libcxx/include/__ranges/join_view.h libcxx/include/__ranges/lazy_split_view.h libcxx/include/__ranges/non_propagating_cache.h libcxx/include/__ranges/owning_view.h libcxx/include/__ranges/range_adaptor.h libcxx/include/__ranges/rbegin.h libcxx/include/__ranges/ref_view.h libcxx/include/__ranges/rend.h libcxx/include/__ranges/reverse_view.h libcxx/include/__ranges/single_view.h libcxx/include/__ranges/size.h libcxx/include/__ranges/subrange.h libcxx/include/__ranges/take_view.h libcxx/include/__ranges/transform_view.h libcxx/include/__ranges/view_interface.h libcxx/include/__ranges/views.h libcxx/include/__ranges/zip_view.h libcxx/include/__split_buffer libcxx/include/__string/char_traits.h libcxx/include/__support/android/locale_bionic.h libcxx/include/__support/fuchsia/xlocale.h libcxx/include/__support/ibm/gettod_zos.h libcxx/include/__support/ibm/locale_mgmt_zos.h libcxx/include/__support/ibm/nanosleep.h libcxx/include/__support/ibm/xlocale.h libcxx/include/__support/newlib/xlocale.h libcxx/include/__support/win32/locale_win32.h libcxx/include/__support/xlocale/__nop_locale_mgmt.h libcxx/include/__system_error/errc.h libcxx/include/__thread/formatter.h libcxx/include/__thread/poll_with_backoff.h libcxx/include/__thread/this_thread.h libcxx/include/__thread/thread.h libcxx/include/__thread/timed_backoff_policy.h libcxx/include/__threading_support libcxx/include/__tree libcxx/include/__tuple/make_tuple_types.h libcxx/include/__tuple/sfinae_helpers.h libcxx/include/__tuple/tuple_element.h libcxx/include/__tuple/tuple_indices.h libcxx/include/__tuple/tuple_like_ext.h libcxx/include/__tuple/tuple_size.h libcxx/include/__tuple/tuple_types.h libcxx/include/__utility/as_const.h libcxx/include/__utility/cmp.h libcxx/include/__utility/convert_to_integral.h libcxx/include/__utility/exchange.h libcxx/include/__utility/in_place.h libcxx/include/__utility/integer_sequence.h libcxx/include/__utility/pair.h libcxx/include/__utility/piecewise_construct.h libcxx/include/__utility/priority_tag.h libcxx/include/__utility/rel_ops.h libcxx/include/__utility/to_underlying.h libcxx/include/__utility/unreachable.h libcxx/include/__variant/monostate.h libcxx/include/__verbose_abort libcxx/include/any libcxx/include/array libcxx/include/barrier libcxx/include/bitset libcxx/include/cctype libcxx/include/cmath libcxx/include/codecvt libcxx/include/complex libcxx/include/condition_variable libcxx/include/cstddef libcxx/include/ctype.h libcxx/include/cuchar libcxx/include/deque libcxx/include/errno.h libcxx/include/expected libcxx/include/experimental/__config libcxx/include/experimental/__memory libcxx/include/experimental/iterator libcxx/include/experimental/propagate_const libcxx/include/experimental/type_traits libcxx/include/experimental/utility libcxx/include/ext/__hash libcxx/include/ext/hash_map libcxx/include/ext/hash_set libcxx/include/fenv.h libcxx/include/float.h libcxx/include/forward_list libcxx/include/fstream libcxx/include/future libcxx/include/initializer_list libcxx/include/inttypes.h libcxx/include/iomanip libcxx/include/ios libcxx/include/iosfwd libcxx/include/istream libcxx/include/latch libcxx/include/limits libcxx/include/list libcxx/include/locale libcxx/include/locale.h libcxx/include/map libcxx/include/math.h libcxx/include/mutex libcxx/include/new libcxx/include/numbers libcxx/include/optional libcxx/include/ostream libcxx/include/queue libcxx/include/ranges libcxx/include/ratio libcxx/include/regex libcxx/include/scoped_allocator libcxx/include/semaphore libcxx/include/set libcxx/include/span libcxx/include/sstream libcxx/include/stack libcxx/include/stdatomic.h libcxx/include/stdbool.h libcxx/include/stddef.h libcxx/include/stdexcept libcxx/include/stdint.h libcxx/include/stdio.h libcxx/include/stdlib.h libcxx/include/streambuf libcxx/include/string libcxx/include/string.h libcxx/include/string_view libcxx/include/strstream libcxx/include/thread libcxx/include/tuple libcxx/include/typeindex libcxx/include/typeinfo libcxx/include/uchar.h libcxx/include/unordered_map libcxx/include/unordered_set libcxx/include/valarray libcxx/include/variant libcxx/include/vector libcxx/include/wchar.h libcxx/include/wctype.h libcxx/src/any.cpp libcxx/src/atomic.cpp libcxx/src/barrier.cpp libcxx/src/bind.cpp libcxx/src/call_once.cpp libcxx/src/charconv.cpp libcxx/src/chrono.cpp libcxx/src/condition_variable.cpp libcxx/src/condition_variable_destructor.cpp libcxx/src/exception.cpp libcxx/src/filesystem/directory_entry.cpp libcxx/src/filesystem/directory_iterator.cpp libcxx/src/filesystem/error.h libcxx/src/filesystem/file_descriptor.h libcxx/src/filesystem/filesystem_clock.cpp libcxx/src/filesystem/filesystem_error.cpp libcxx/src/filesystem/int128_builtins.cpp libcxx/src/filesystem/operations.cpp libcxx/src/filesystem/path.cpp libcxx/src/filesystem/path_parser.h libcxx/src/filesystem/posix_compat.h libcxx/src/filesystem/time_utils.h libcxx/src/functional.cpp libcxx/src/future.cpp libcxx/src/hash.cpp libcxx/src/include/apple_availability.h libcxx/src/include/atomic_support.h libcxx/src/include/config_elast.h libcxx/src/include/refstring.h libcxx/src/include/ryu/ryu.h libcxx/src/include/sso_allocator.h libcxx/src/ios.cpp libcxx/src/iostream.cpp libcxx/src/locale.cpp libcxx/src/memory.cpp libcxx/src/mutex.cpp libcxx/src/mutex_destructor.cpp libcxx/src/optional.cpp libcxx/src/random.cpp libcxx/src/random_shuffle.cpp libcxx/src/regex.cpp libcxx/src/std_stream.h libcxx/src/string.cpp libcxx/src/support/ibm/mbsnrtowcs.cpp libcxx/src/support/ibm/wcsnrtombs.cpp libcxx/src/support/ibm/xlocale_zos.cpp libcxx/src/support/win32/locale_win32.cpp libcxx/src/support/win32/support.cpp libcxx/src/support/win32/thread_win32.cpp libcxx/src/system_error.cpp libcxx/src/thread.cpp libcxx/src/typeinfo.cpp libcxx/src/valarray.cpp libcxx/src/variant.cpp libcxx/src/vector.cpp libcxx/src/verbose_abort.cpp
View the diff from clang-format here.
diff --git a/libcxx/src/locale.cpp b/libcxx/src/locale.cpp
index 73b24dbf59..6165dc84ba 100644
--- a/libcxx/src/locale.cpp
+++ b/libcxx/src/locale.cpp
@@ -975,7 +975,7 @@ const ctype<char>::mask* ctype<char>::classic_table() noexcept {
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     };
   // clang-format on
-  return builtin_table;
+    return builtin_table;
 }
 #else
 const ctype<char>::mask* ctype<char>::classic_table() noexcept {
diff --git a/libcxx/src/support/ibm/mbsnrtowcs.cpp b/libcxx/src/support/ibm/mbsnrtowcs.cpp
index 122dc5ed89..2bda0d1770 100644
--- a/libcxx/src/support/ibm/mbsnrtowcs.cpp
+++ b/libcxx/src/support/ibm/mbsnrtowcs.cpp
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <cstddef>  // size_t
-#include <cwchar>   // mbstate_t
+#include <cstddef> // size_t
+#include <cwchar>  // mbstate_t
 #include <limits.h> // MB_LEN_MAX
 #include <string.h> // wmemcpy
 

@ldionne ldionne force-pushed the review/clang-format-libcxx branch from 50a169c to 38121d9 Compare December 4, 2023 16:11
@ldionne
Copy link
Member Author

ldionne commented Dec 4, 2023

I went through everything and this is the set of annotations I'd add for now: #74352. Other suggestions are welcome.

@ldionne ldionne force-pushed the review/clang-format-libcxx branch 2 times, most recently from 585820e to 6ac7a38 Compare December 5, 2023 16:27
@ldionne
Copy link
Member Author

ldionne commented Dec 5, 2023

I think clang-format is doing something reasonable everywhere. However, there's one pattern we have which might merit discussion. We have a bunch of these write-it-three-times functions. Here's an example with the current manual formatting:

template <class... _Args, class = enable_if_t<is_invocable_v<_Op, _BoundArgs&..., _Args...>>>
_LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Args&&... __args) & noexcept(
    noexcept(_Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)))
    -> decltype(_Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)) {
  return _Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...);
}

If we just run this through clang-format, we get:

// option #1
template <class... _Args, class = enable_if_t<is_invocable_v<_Op, _BoundArgs const&..., _Args...>>>
_LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Args&&... __args) const& noexcept(
    noexcept(_Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)))
    -> decltype(_Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)) {
  return _Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...);
}

This is not aligned anymore, and it's harder to read. This example isn't very ugly, but we have a few others that do become harder to read when they're not aligned anymore. If we're not happy with this, another option would be to use "clever" comments:

// option #2
template <class... _Args, class = enable_if_t<is_invocable_v<_Op, _BoundArgs&..., _Args...>>>
_LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Args&&... __args) & noexcept(
    noexcept(/*   */ _Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)))
    -> decltype(/**/ _Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...)) //
{
  return /*       */ _Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...);
}

The third option would be to use a macro. We previously discussed this but eventually ended up not doing it:

// option 3
#  define _LIBCPP_EXPRESSION_EQUIVALENT(expr)                                                      \
    noexcept(noexcept(expr))->decltype(expr) { return expr; }                                      \
    static_assert(true, "")

template <class... _Args, class = enable_if_t<is_invocable_v<_Op, _BoundArgs const&..., _Args...>>>
_LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Args&&... __args) const& //
    _LIBCPP_EXPRESSION_EQUIVALENT(_Op()(std::get<_Idx>(__bound_args_)..., std::forward<_Args>(__args)...));

@H-G-Hristov
Copy link
Contributor

H-G-Hristov commented Dec 7, 2023

I think clang-format is doing something reasonable everywhere. However, there's one pattern we have which might merit discussion. We have a bunch of these write-it-three-times functions. Here's an example with the current manual formatting:

[...]

@ldionne Would this new clang-format 18 option help: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#allowbreakbeforenoexceptspecifier

@ldionne
Copy link
Member Author

ldionne commented Dec 7, 2023

@ldionne Would this new clang-format 18 option help: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#allowbreakbeforenoexceptspecifier

Thanks for pointing this out, I wasn't aware of it! However, I am not sure it would fix our issues because it probably still wouldn't align the three identical bits of code. It feels like clang-format would almost need to learn about the write-it-three-times pattern in order to do a good job at this (and even then, some write-it-three-times expressions are so long that custom formatting is really needed).

This patch runs clang-format on all of libcxx/include and libcxx/src,
in accordance with the RFC discussed at [1]. Follow-up patches will
format the benchmarks, the test suite and remaining parts of the code.
I'm splitting this one into its own patch so the diff is a bit easier
to review.

This patch was generated with:

   find libcxx/include libcxx/src -type f \
      | grep -v 'module.modulemap.in' \
      | grep -v 'CMakeLists.txt' \
      | grep -v 'README.txt' \
      | grep -v 'libcxx.imp' \
      | grep -v '__config_site.in' \
      | xargs clang-format -i

A Git merge driver is available in libcxx/utils/clang-format-merge-driver.sh
to help resolve merge and rebase issues across these formatting changes.

[1]: https://discourse.llvm.org/t/rfc-clang-formatting-all-of-libc-once-and-for-all
@ldionne ldionne force-pushed the review/clang-format-libcxx branch from 6ac7a38 to fd4d116 Compare December 18, 2023 18:53
@ldionne ldionne merged commit 9783f28 into llvm:main Dec 18, 2023
@ldionne ldionne deleted the review/clang-format-libcxx branch December 18, 2023 19:01
@petrhosek
Copy link
Member

Looks like this broke the build of libc++ on Windows with the following error:

C:\b\s\w\ir\x\w\llvm_build\.\bin\clang-cl.exe --target=x86_64-pc-windows-msvc  /nologo -TP -DUNICODE -D_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH -D_ALLOW_MSC_VER_MISMATCH -D_CRTBLD -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_STDIO_ISO_WIDE_SPECIFIERS -D_GLIBCXX_ASSERTIONS -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS="" -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -IC:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src -IC:/b/s/w/ir/x/w/llvm_build/include/x86_64-pc-windows-msvc/c++/v1 -IC:/b/s/w/ir/x/w/llvm_build/include/c++/v1 /Zc:inline /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -w14062 -we4238 /Gw -no-canonical-prefixes /Zi /O2 /Ob1  -std:c++latest -MT -UNDEBUG -W4 -Wextra -Wnewline-eof -Wshadow -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wextra-semi -Wundef -Wunused-template -Wformat-nonliteral -Wno-user-defined-literals -Wno-covered-switch-default -Wno-suggest-override -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-compat -Wno-undef -Wno-reserved-id-macro -Wno-gnu-include-next -Wno-gcc-compat -Wno-zero-as-null-pointer-constant -Wno-deprecated-dynamic-exception-spec -Wno-sign-conversion -Wno-old-style-cast -Wno-deprecated -Wno-shift-sign-overflow -Wno-double-promotion -Wno-error -EHsc /showIncludes /Folibcxx/src/CMakeFiles/cxx_static.dir/support/win32/thread_win32.cpp.obj /Fdlibcxx\src\CMakeFiles\cxx_static.dir\cxx_static.pdb -c -- C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:14:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\fibersapi.h:18:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h:182:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(173,2): error: "No Target Architecture"
  173 | #error "No Target Architecture"
      |  ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(8906,5): error: unknown type name 'PCONTEXT'; did you mean '_CONTEXT'?
 8906 |     PCONTEXT ContextRecord;
      |     ^
C:\b\s\w\ir\cache\windows_sdk\VC\Tools\MSVC\14.34.31933\include\excpt.h(49,16): note: '_CONTEXT' declared here
   49 |         struct _CONTEXT;
      |                ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:14:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\fibersapi.h:18:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h:182:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(8906,14): error: field has incomplete type '_CONTEXT'
 8906 |     PCONTEXT ContextRecord;
      |              ^
C:\b\s\w\ir\cache\windows_sdk\VC\Tools\MSVC\14.34.31933\include\excpt.h(49,16): note: forward declaration of '_CONTEXT'
   49 |         struct _CONTEXT;
      |                ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:14:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\fibersapi.h:18:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h:182:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(19329,11): error: unknown type name 'PCONTEXT'; did you mean '_CONTEXT'?
 19329 |     _Out_ PCONTEXT ContextRecord
       |           ^
C:\b\s\w\ir\cache\windows_sdk\VC\Tools\MSVC\14.34.31933\include\excpt.h(49,16): note: '_CONTEXT' declared here
   49 |         struct _CONTEXT;
      |                ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:14:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\fibersapi.h:18:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\shared\minwindef.h:182:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(19980,11): error: unknown type name 'PSLIST_HEADER'
 19980 |     _Out_ PSLIST_HEADER ListHead
       |           ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(19988,16): error: unknown type name 'SLIST_HEADER'
 19988 |     _In_ const SLIST_HEADER *ListHead
       |                ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(19995,13): error: unknown type name 'PSLIST_HEADER'
 19995 |     _Inout_ PSLIST_HEADER ListHead
       |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(20002,13): error: unknown type name 'PSLIST_HEADER'
 20002 |     _Inout_ PSLIST_HEADER ListHead,
       |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(20010,13): error: unknown type name 'PSLIST_HEADER'
 20010 |     _Inout_ PSLIST_HEADER ListHead,
       |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(20020,13): error: unknown type name 'PSLIST_HEADER'
 20020 |     _Inout_ PSLIST_HEADER ListHead
       |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winnt.h(20027,10): error: unknown type name 'PSLIST_HEADER'
 20027 |     _In_ PSLIST_HEADER ListHead
       |          ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:16:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\windows.h:172:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winbase.h:35:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\minwinbase.h(384,9): error: unknown type name 'PCONTEXT'; did you mean '_CONTEXT'?
  384 | typedef PCONTEXT LPCONTEXT;
      |         ^
C:\b\s\w\ir\cache\windows_sdk\VC\Tools\MSVC\14.34.31933\include\excpt.h(49,16): note: '_CONTEXT' declared here
   49 |         struct _CONTEXT;
      |                ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:16:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\windows.h:172:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winbase.h:47:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\errhandlingapi.h(214,14): error: unknown type name 'PCONTEXT'
  214 |     _In_opt_ PCONTEXT pContextRecord,
      |              ^
In file included from C:/b/s/w/ir/x/w/llvm-llvm-project/libcxx/src/support/win32/thread_win32.cpp:16:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\windows.h:172:
In file included from C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\winbase.h:54:
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(53,11): error: unknown type name 'PSLIST_HEADER'
   53 |     _Out_ PSLIST_HEADER ListHead
      |           ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(61,13): error: unknown type name 'PSLIST_HEADER'
   61 |     _Inout_ PSLIST_HEADER ListHead
      |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(69,13): error: unknown type name 'PSLIST_HEADER'
   69 |     _Inout_ PSLIST_HEADER ListHead,
      |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(82,13): error: unknown type name 'PSLIST_HEADER'
   82 |     _Inout_ PSLIST_HEADER ListHead,
      |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(95,13): error: unknown type name 'PSLIST_HEADER'
   95 |     _Inout_ PSLIST_HEADER ListHead
      |             ^
C:\b\s\w\ir\cache\windows_sdk\Windows Kits\10\Include\10.0.19041.0\um\interlockedapi.h(103,10): error: unknown type name 'PSLIST_HEADER'
  103 |     _In_ PSLIST_HEADER ListHead
      |          ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

@petrhosek
Copy link
Member

It looks like the formatting changed the order of includes in libcxx/src/support/win32/thread_win32.cpp:

- #include <windows.h>
- #include <process.h>
#include <fibersapi.h>
+ #include <process.h>
+ #include <windows.h>

I didn't have a chance to verify this locally yet, but I suspect this is the culprit.

@philnik777
Copy link
Contributor

@petrhosek I just looked and thought the same. If this is actually the problem, IMO it's kinda insane that the windows headers don't properly IWYU. Would be great if you could check it out and make a patch to fix it if that's actually the problem. I'd rather avoid reverting any re-applying this patch.

ldionne added a commit that referenced this pull request Dec 18, 2023
As reported in [1], it looks like the Windows headers are picky about
the order in which they are included, and the clang-format change broke
the build by reordering the headers.

[1]: #74334 (comment)
@ldionne
Copy link
Member Author

ldionne commented Dec 18, 2023

@petrhosek Thanks, I just did de5c49f to try and make the build green again. Let me know if you still see issues.

@DimitryAndric
Copy link
Collaborator

On Windows, <windows.h> is pretty special, it must usually be the first included header (at least, of the Win32 API related headers). I'm unsure if clang-format can be convinced to never alphabetically sort it.

@petrhosek
Copy link
Member

@petrhosek Thanks, I just did de5c49f to try and make the build green again. Let me know if you still see issues.

Thanks @ldionne, that resolved the issue.

I looked into solutions, and the only two options I found are to either disable Clang-Format:

// clang-format off
#include <windows.h>
#include <process.h>
// clang-format on

or to move <windows.h> into a separate group:

#include <windows.h>

#include <process.h>

blueboxd pushed a commit to blueboxd/libcxx that referenced this pull request Feb 1, 2024
As reported in [1], it looks like the Windows headers are picky about
the order in which they are included, and the clang-format change broke
the build by reordering the headers.

[1]: llvm/llvm-project#74334 (comment)

NOKEYCHECK=True
GitOrigin-RevId: de5c49f7e63f3237afe1e647d359cb8a5227ba4d
qihangkong pushed a commit to rvgpu/rvgpu-llvm that referenced this pull request Apr 23, 2024
As reported in [1], it looks like the Windows headers are picky about
the order in which they are included, and the clang-format change broke
the build by reordering the headers.

[1]: llvm/llvm-project#74334 (comment)
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.

6 participants