[llvm-branch-commits] [libcxx] [🍒][libc++] Fix missing and incorrect push/pop macros (#79204) (PR #79497)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Jan 25 12:52:32 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

<details>
<summary>Changes</summary>

We recently noticed that the unwrap_iter.h file was pushing macros, but it was pushing them again instead of popping them at the end of the file. This led to libc++ basically swallowing any custom definition of these macros in user code:

    #define min HELLO
    #include <algorithm>
    // min is not HELLO anymore, it's not defined

While investigating this issue, I noticed that our push/pop pragmas were actually entirely wrong too. Indeed, instead of pushing macros like `move`, we'd push `move(int, int)` in the pragma, which is not a valid macro name. As a result, we would not actually push macros like `move` -- instead we'd simply undefine them. This led to the following code not working:

    #define move HELLO
    #include <algorithm>
    // move is not HELLO anymore

Fixing the pragma push/pop incantations led to a cascade of issues because we use identifiers like `move` in a large number of places, and all of these headers would now need to do the push/pop dance.

This patch fixes all these issues. First, it adds a check that we don't swallow important names like min, max, move or refresh as explained above. This is done by augmenting the existing
system_reserved_names.gen.py test to also check that the macros are what we expect after including each header.

Second, it fixes the push/pop pragmas to work properly and adds missing pragmas to all the files I could detect a failure in via the newly added test.

rdar://121365472
(cherry picked from commit 7b4622514d232ce5f7110dd8b20d90e81127c467)

---

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


185 Files Affected:

- (modified) libcxx/include/__algorithm/copy_move_common.h (+5) 
- (modified) libcxx/include/__algorithm/equal.h (+5) 
- (modified) libcxx/include/__algorithm/equal_range.h (+5) 
- (modified) libcxx/include/__algorithm/fold.h (+5) 
- (modified) libcxx/include/__algorithm/in_found_result.h (+5) 
- (modified) libcxx/include/__algorithm/in_fun_result.h (+5) 
- (modified) libcxx/include/__algorithm/in_in_out_result.h (+5) 
- (modified) libcxx/include/__algorithm/in_in_result.h (+5) 
- (modified) libcxx/include/__algorithm/in_out_out_result.h (+5) 
- (modified) libcxx/include/__algorithm/includes.h (+5) 
- (modified) libcxx/include/__algorithm/next_permutation.h (+5) 
- (modified) libcxx/include/__algorithm/nth_element.h (+5) 
- (modified) libcxx/include/__algorithm/partial_sort.h (+5) 
- (modified) libcxx/include/__algorithm/partial_sort_copy.h (+5) 
- (modified) libcxx/include/__algorithm/partition.h (+5) 
- (modified) libcxx/include/__algorithm/prev_permutation.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_any_all_none_of.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_copy.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_count.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_equal.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_fill.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_find.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_for_each.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_generate.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_is_partitioned.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_merge.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_move.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_replace.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_rotate_copy.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_sort.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_stable_sort.h (+5) 
- (modified) libcxx/include/__algorithm/pstl_transform.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_all_of.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_any_of.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_binary_search.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_clamp.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_contains.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_copy_backward.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_copy_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_copy_n.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_count.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_count_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_ends_with.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_equal.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_equal_range.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_fill.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_fill_n.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_find.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_find_end.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_find_first_of.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_find_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_find_if_not.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_for_each.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_for_each_n.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_generate.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_generate_n.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_includes.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_inplace_merge.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_heap.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_heap_until.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_partitioned.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_permutation.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_sorted.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_is_sorted_until.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_iterator_concept.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_lexicographical_compare.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_lower_bound.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_make_heap.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_max_element.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_merge.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_min_element.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_minmax_element.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_mismatch.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_move.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_move_backward.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_next_permutation.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_none_of.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_nth_element.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_partial_sort.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_partial_sort_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_partition.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_partition_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_partition_point.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_pop_heap.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_prev_permutation.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_push_heap.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_remove.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_remove_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_remove_copy_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_remove_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_replace.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_replace_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_replace_copy_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_replace_if.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_reverse_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_rotate.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_rotate_copy.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_sample.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_search_n.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_set_difference.h (+6) 
- (modified) libcxx/include/__algorithm/ranges_set_intersection.h (+6) 
- (modified) libcxx/include/__algorithm/ranges_set_symmetric_difference.h (+6) 
- (modified) libcxx/include/__algorithm/ranges_set_union.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_shuffle.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_sort.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_sort_heap.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_stable_partition.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_stable_sort.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_starts_with.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_swap_ranges.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_transform.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_unique.h (+5) 
- (modified) libcxx/include/__algorithm/ranges_unique_copy.h (+5) 
- (modified) libcxx/include/__algorithm/remove.h (+5) 
- (modified) libcxx/include/__algorithm/remove_if.h (+5) 
- (modified) libcxx/include/__algorithm/reverse.h (+5) 
- (modified) libcxx/include/__algorithm/rotate.h (+5) 
- (modified) libcxx/include/__algorithm/set_difference.h (+5) 
- (modified) libcxx/include/__algorithm/set_intersection.h (+5) 
- (modified) libcxx/include/__algorithm/set_symmetric_difference.h (+5) 
- (modified) libcxx/include/__algorithm/set_union.h (+5) 
- (modified) libcxx/include/__algorithm/shift_left.h (+5) 
- (modified) libcxx/include/__algorithm/shift_right.h (+5) 
- (modified) libcxx/include/__algorithm/sort.h (+5) 
- (modified) libcxx/include/__algorithm/sort_heap.h (+5) 
- (modified) libcxx/include/__algorithm/stable_partition.h (+5) 
- (modified) libcxx/include/__algorithm/stable_sort.h (+5) 
- (modified) libcxx/include/__algorithm/swap_ranges.h (+5) 
- (modified) libcxx/include/__algorithm/unique.h (+5) 
- (modified) libcxx/include/__algorithm/unique_copy.h (+5) 
- (modified) libcxx/include/__algorithm/unwrap_iter.h (+1-1) 
- (modified) libcxx/include/__algorithm/unwrap_range.h (+5) 
- (modified) libcxx/include/__config (+2-2) 
- (modified) libcxx/include/__filesystem/directory_iterator.h (+5) 
- (modified) libcxx/include/__filesystem/path.h (+5) 
- (modified) libcxx/include/__filesystem/recursive_directory_iterator.h (+5) 
- (modified) libcxx/include/__format/format_arg.h (+5) 
- (modified) libcxx/include/__format/format_context.h (+5) 
- (modified) libcxx/include/__format/format_functions.h (+5) 
- (modified) libcxx/include/__format/formatter_output.h (+5) 
- (modified) libcxx/include/__format/write_escaped.h (+5) 
- (modified) libcxx/include/__functional/function.h (+5) 
- (modified) libcxx/include/__iterator/cpp17_iterator_concepts.h (+5) 
- (modified) libcxx/include/__iterator/iterator_with_data.h (+5) 
- (modified) libcxx/include/__memory/ranges_uninitialized_algorithms.h (+5) 
- (modified) libcxx/include/__memory/raw_storage_iterator.h (+5) 
- (modified) libcxx/include/__memory/shared_ptr.h (+5) 
- (modified) libcxx/include/__memory/uninitialized_algorithms.h (+5) 
- (modified) libcxx/include/__mutex/once_flag.h (+5) 
- (modified) libcxx/include/__numeric/pstl_reduce.h (+5) 
- (modified) libcxx/include/__numeric/pstl_transform_reduce.h (+5) 
- (modified) libcxx/include/__numeric/reduce.h (+5) 
- (modified) libcxx/include/__numeric/saturation_arithmetic.h (+5) 
- (modified) libcxx/include/__numeric/transform_reduce.h (+5) 
- (modified) libcxx/include/__ranges/counted.h (+5) 
- (modified) libcxx/include/__ranges/drop_while_view.h (+5) 
- (modified) libcxx/include/__ranges/elements_view.h (+5) 
- (modified) libcxx/include/__ranges/filter_view.h (+5) 
- (modified) libcxx/include/__ranges/iota_view.h (+5) 
- (modified) libcxx/include/__ranges/join_view.h (+5) 
- (modified) libcxx/include/__ranges/lazy_split_view.h (+5) 
- (modified) libcxx/include/__ranges/repeat_view.h (+5) 
- (modified) libcxx/include/__ranges/reverse_view.h (+5) 
- (modified) libcxx/include/__ranges/single_view.h (+5) 
- (modified) libcxx/include/__ranges/split_view.h (+5) 
- (modified) libcxx/include/__ranges/take_while_view.h (+5) 
- (modified) libcxx/include/__ranges/transform_view.h (+5) 
- (modified) libcxx/include/__thread/jthread.h (+5) 
- (modified) libcxx/include/__thread/thread.h (+5) 
- (modified) libcxx/include/array (+5) 
- (modified) libcxx/include/condition_variable (+5) 
- (modified) libcxx/include/experimental/iterator (+5) 
- (modified) libcxx/include/future (+5) 
- (modified) libcxx/include/ios (+5) 
- (modified) libcxx/include/map (+5) 
- (modified) libcxx/include/ostream (+5) 
- (modified) libcxx/include/queue (+5) 
- (modified) libcxx/include/set (+5) 
- (modified) libcxx/include/stack (+5) 
- (modified) libcxx/include/strstream (+5) 
- (modified) libcxx/include/unordered_map (+5) 
- (modified) libcxx/include/unordered_set (+5) 
- (modified) libcxx/test/libcxx/system_reserved_names.gen.py (+11-1) 


``````````diff
diff --git a/libcxx/include/__algorithm/copy_move_common.h b/libcxx/include/__algorithm/copy_move_common.h
index b350507e32bae95..0fc7a5e3cee7009 100644
--- a/libcxx/include/__algorithm/copy_move_common.h
+++ b/libcxx/include/__algorithm/copy_move_common.h
@@ -31,6 +31,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 // Type traits.
@@ -132,4 +135,6 @@ __dispatch_copy_or_move(_InIter __first, _Sent __last, _OutIter __out_first) {
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_COPY_MOVE_COMMON_H
diff --git a/libcxx/include/__algorithm/equal.h b/libcxx/include/__algorithm/equal.h
index f03f010aa51ab3f..3c0e3060e39a99f 100644
--- a/libcxx/include/__algorithm/equal.h
+++ b/libcxx/include/__algorithm/equal.h
@@ -30,6 +30,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
@@ -162,4 +165,6 @@ equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_EQUAL_H
diff --git a/libcxx/include/__algorithm/equal_range.h b/libcxx/include/__algorithm/equal_range.h
index 7ce54965fff05fb..a94290431971c41 100644
--- a/libcxx/include/__algorithm/equal_range.h
+++ b/libcxx/include/__algorithm/equal_range.h
@@ -31,6 +31,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _AlgPolicy, class _Compare, class _Iter, class _Sent, class _Tp, class _Proj>
@@ -77,4 +80,6 @@ equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __valu
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_EQUAL_RANGE_H
diff --git a/libcxx/include/__algorithm/fold.h b/libcxx/include/__algorithm/fold.h
index 88e6814d5cf99dd..1a9d76b50d83c96 100644
--- a/libcxx/include/__algorithm/fold.h
+++ b/libcxx/include/__algorithm/fold.h
@@ -32,6 +32,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 23
@@ -122,4 +125,6 @@ inline constexpr auto fold_left = __fold_left();
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_FOLD_H
diff --git a/libcxx/include/__algorithm/in_found_result.h b/libcxx/include/__algorithm/in_found_result.h
index 88a0255d169831a..a67ae387974c0a8 100644
--- a/libcxx/include/__algorithm/in_found_result.h
+++ b/libcxx/include/__algorithm/in_found_result.h
@@ -18,6 +18,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if _LIBCPP_STD_VER >= 20
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -46,4 +49,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // _LIBCPP_STD_VER >= 20
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_IN_FOUND_RESULT_H
diff --git a/libcxx/include/__algorithm/in_fun_result.h b/libcxx/include/__algorithm/in_fun_result.h
index 6110c1cf86cd52b..a22069a9a8ddaae 100644
--- a/libcxx/include/__algorithm/in_fun_result.h
+++ b/libcxx/include/__algorithm/in_fun_result.h
@@ -18,6 +18,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 20
@@ -46,4 +49,6 @@ struct in_fun_result {
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_IN_FUN_RESULT_H
diff --git a/libcxx/include/__algorithm/in_in_out_result.h b/libcxx/include/__algorithm/in_in_out_result.h
index 95ce4f4fd5bd44a..ba0380b5c68147d 100644
--- a/libcxx/include/__algorithm/in_in_out_result.h
+++ b/libcxx/include/__algorithm/in_in_out_result.h
@@ -18,6 +18,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 20
@@ -51,4 +54,6 @@ struct in_in_out_result {
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_IN_IN_OUT_RESULT_H
diff --git a/libcxx/include/__algorithm/in_in_result.h b/libcxx/include/__algorithm/in_in_result.h
index d1d62dae7f6703a..994573fc70fd887 100644
--- a/libcxx/include/__algorithm/in_in_result.h
+++ b/libcxx/include/__algorithm/in_in_result.h
@@ -18,6 +18,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 20
@@ -48,4 +51,6 @@ struct in_in_result {
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_IN_IN_RESULT_H
diff --git a/libcxx/include/__algorithm/in_out_out_result.h b/libcxx/include/__algorithm/in_out_out_result.h
index 143642368750860..8ceb452841a419b 100644
--- a/libcxx/include/__algorithm/in_out_out_result.h
+++ b/libcxx/include/__algorithm/in_out_out_result.h
@@ -18,6 +18,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER >= 20
@@ -49,4 +52,6 @@ struct in_out_out_result {
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_IN_OUT_OUT_RESULT_H
diff --git a/libcxx/include/__algorithm/includes.h b/libcxx/include/__algorithm/includes.h
index 531752e93175699..05d45365eb806ff 100644
--- a/libcxx/include/__algorithm/includes.h
+++ b/libcxx/include/__algorithm/includes.h
@@ -22,6 +22,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Comp, class _Proj1, class _Proj2>
@@ -71,4 +74,6 @@ includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __fi
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_INCLUDES_H
diff --git a/libcxx/include/__algorithm/next_permutation.h b/libcxx/include/__algorithm/next_permutation.h
index d66ea9b973453f6..011ee028cc2f522 100644
--- a/libcxx/include/__algorithm/next_permutation.h
+++ b/libcxx/include/__algorithm/next_permutation.h
@@ -22,6 +22,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _AlgPolicy, class _Compare, class _BidirectionalIterator, class _Sentinel>
@@ -67,4 +70,6 @@ next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last)
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_NEXT_PERMUTATION_H
diff --git a/libcxx/include/__algorithm/nth_element.h b/libcxx/include/__algorithm/nth_element.h
index 37ddfbdacf044d0..da748d7255aba6a 100644
--- a/libcxx/include/__algorithm/nth_element.h
+++ b/libcxx/include/__algorithm/nth_element.h
@@ -23,6 +23,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _Compare, class _RandomAccessIterator>
@@ -253,4 +256,6 @@ nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomA
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_NTH_ELEMENT_H
diff --git a/libcxx/include/__algorithm/partial_sort.h b/libcxx/include/__algorithm/partial_sort.h
index 27511a124229bba..85a8fdc77aa228b 100644
--- a/libcxx/include/__algorithm/partial_sort.h
+++ b/libcxx/include/__algorithm/partial_sort.h
@@ -26,6 +26,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _AlgPolicy, class _Compare, class _RandomAccessIterator, class _Sentinel>
@@ -83,4 +86,6 @@ partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _Ran
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PARTIAL_SORT_H
diff --git a/libcxx/include/__algorithm/partial_sort_copy.h b/libcxx/include/__algorithm/partial_sort_copy.h
index e7d8df4de89f95e..ef7c9d34d949831 100644
--- a/libcxx/include/__algorithm/partial_sort_copy.h
+++ b/libcxx/include/__algorithm/partial_sort_copy.h
@@ -28,6 +28,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _AlgPolicy,
@@ -98,4 +101,6 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PARTIAL_SORT_COPY_H
diff --git a/libcxx/include/__algorithm/partition.h b/libcxx/include/__algorithm/partition.h
index e2ceb07bf19588b..824e49b9ec21495 100644
--- a/libcxx/include/__algorithm/partition.h
+++ b/libcxx/include/__algorithm/partition.h
@@ -19,6 +19,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _Predicate, class _AlgPolicy, class _ForwardIterator, class _Sentinel>
@@ -82,4 +85,6 @@ partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred)
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PARTITION_H
diff --git a/libcxx/include/__algorithm/prev_permutation.h b/libcxx/include/__algorithm/prev_permutation.h
index 3e4bbb3fbb1670e..8d15b6806401d8d 100644
--- a/libcxx/include/__algorithm/prev_permutation.h
+++ b/libcxx/include/__algorithm/prev_permutation.h
@@ -22,6 +22,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _AlgPolicy, class _Compare, class _BidirectionalIterator, class _Sentinel>
@@ -67,4 +70,6 @@ prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last)
 
 _LIBCPP_END_NAMESPACE_STD
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PREV_PERMUTATION_H
diff --git a/libcxx/include/__algorithm/pstl_any_all_none_of.h b/libcxx/include/__algorithm/pstl_any_all_none_of.h
index d93fdba2224c9b1..4b1e0e61b542185 100644
--- a/libcxx/include/__algorithm/pstl_any_all_none_of.h
+++ b/libcxx/include/__algorithm/pstl_any_all_none_of.h
@@ -23,6 +23,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -144,4 +147,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_ANY_ALL_NONE_OF_H
diff --git a/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h b/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h
index ab2e3172b8b63bd..14a0d76741d4c55 100644
--- a/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h
+++ b/libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h
@@ -25,6 +25,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -194,4 +197,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_BACKENDS_CPU_BACKENDS_TRANSFORM_REDUCE_H
diff --git a/libcxx/include/__algorithm/pstl_copy.h b/libcxx/include/__algorithm/pstl_copy.h
index 19f275a0d5d97fc..1069dcec0e117a6 100644
--- a/libcxx/include/__algorithm/pstl_copy.h
+++ b/libcxx/include/__algorithm/pstl_copy.h
@@ -28,6 +28,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -113,4 +116,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_COPY_H
diff --git a/libcxx/include/__algorithm/pstl_count.h b/libcxx/include/__algorithm/pstl_count.h
index 28806fca0637013..2781f6bfd3c9e06 100644
--- a/libcxx/include/__algorithm/pstl_count.h
+++ b/libcxx/include/__algorithm/pstl_count.h
@@ -29,6 +29,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -113,4 +116,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_COUNT_H
diff --git a/libcxx/include/__algorithm/pstl_equal.h b/libcxx/include/__algorithm/pstl_equal.h
index b343d2675980c9c..d235c0f4f419722 100644
--- a/libcxx/include/__algorithm/pstl_equal.h
+++ b/libcxx/include/__algorithm/pstl_equal.h
@@ -21,6 +21,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -167,4 +170,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_EQUAL_H
diff --git a/libcxx/include/__algorithm/pstl_fill.h b/libcxx/include/__algorithm/pstl_fill.h
index 3057dcc04f1ad74..488b49a0feec96c 100644
--- a/libcxx/include/__algorithm/pstl_fill.h
+++ b/libcxx/include/__algorithm/pstl_fill.h
@@ -26,6 +26,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -108,4 +111,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_FILL_H
diff --git a/libcxx/include/__algorithm/pstl_find.h b/libcxx/include/__algorithm/pstl_find.h
index adc05ea1a9e55a0..5b694db68aead40 100644
--- a/libcxx/include/__algorithm/pstl_find.h
+++ b/libcxx/include/__algorithm/pstl_find.h
@@ -25,6 +25,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -133,4 +136,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_FIND_H
diff --git a/libcxx/include/__algorithm/pstl_for_each.h b/libcxx/include/__algorithm/pstl_for_each.h
index 819a43d685abed5..bb7b5a61a6dc0d1 100644
--- a/libcxx/include/__algorithm/pstl_for_each.h
+++ b/libcxx/include/__algorithm/pstl_for_each.h
@@ -28,6 +28,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -100,4 +103,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_FOR_EACH_H
diff --git a/libcxx/include/__algorithm/pstl_generate.h b/libcxx/include/__algorithm/pstl_generate.h
index 56538392d5b5ddd..7133c6f4f4c621d 100644
--- a/libcxx/include/__algorithm/pstl_generate.h
+++ b/libcxx/include/__algorithm/pstl_generate.h
@@ -25,6 +25,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -106,4 +109,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_GENERATE_H
diff --git a/libcxx/include/__algorithm/pstl_is_partitioned.h b/libcxx/include/__algorithm/pstl_is_partitioned.h
index 39cf6369339db69..b65430212207275 100644
--- a/libcxx/include/__algorithm/pstl_is_partitioned.h
+++ b/libcxx/include/__algorithm/pstl_is_partitioned.h
@@ -24,6 +24,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -69,4 +72,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_IS_PARITTIONED
diff --git a/libcxx/include/__algorithm/pstl_merge.h b/libcxx/include/__algorithm/pstl_merge.h
index ed8014510863266..3d262db6bc0c15d 100644
--- a/libcxx/include/__algorithm/pstl_merge.h
+++ b/libcxx/include/__algorithm/pstl_merge.h
@@ -22,6 +22,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -84,4 +87,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_MERGE_H
diff --git a/libcxx/include/__algorithm/pstl_move.h b/libcxx/include/__algorithm/pstl_move.h
index 52baab57591e268..d8441f1a6c2e169 100644
--- a/libcxx/include/__algorithm/pstl_move.h
+++ b/libcxx/include/__algorithm/pstl_move.h
@@ -27,6 +27,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -76,4 +79,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_MOVE_H
diff --git a/libcxx/include/__algorithm/pstl_replace.h b/libcxx/include/__algorithm/pstl_replace.h
index 05dee3f6a4f30c6..b1caf3fd4ac0a1a 100644
--- a/libcxx/include/__algorithm/pstl_replace.h
+++ b/libcxx/include/__algorithm/pstl_replace.h
@@ -24,6 +24,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -239,4 +242,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_REPLACE_H
diff --git a/libcxx/include/__algorithm/pstl_rotate_copy.h b/libcxx/include/__algorithm/pstl_rotate_copy.h
index 33dc9a3635f7e83..346aab1d4a55c0e 100644
--- a/libcxx/include/__algorithm/pstl_rotate_copy.h
+++ b/libcxx/include/__algorithm/pstl_rotate_copy.h
@@ -19,6 +19,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -77,4 +80,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_ROTATE_COPY_H
diff --git a/libcxx/include/__algorithm/pstl_sort.h b/libcxx/include/__algorithm/pstl_sort.h
index 3e71e0aa5ae0a1c..a931f768111a23b 100644
--- a/libcxx/include/__algorithm/pstl_sort.h
+++ b/libcxx/include/__algorithm/pstl_sort.h
@@ -25,6 +25,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -74,4 +77,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_SORT_H
diff --git a/libcxx/include/__algorithm/pstl_stable_sort.h b/libcxx/include/__algorithm/pstl_stable_sort.h
index c9d375535fc4505..8ea0bb3f9a8d590 100644
--- a/libcxx/include/__algorithm/pstl_stable_sort.h
+++ b/libcxx/include/__algorithm/pstl_stable_sort.h
@@ -23,6 +23,9 @@
 #  pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
 #if !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
 _LIBCPP_BEGIN_NAMESPACE_STD
@@ -53,4 +56,6 @@ _LIBCPP_END_NAMESPACE_STD
 
 #endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
 
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP___ALGORITHM_PSTL_STABLE_SORT_H
diff --git a/libcxx/include/__algorithm/pstl_transform.h b/libcxx/include/__algorithm/pstl_transform.h
index aad59d1f30e6b93..f95...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/79497


More information about the llvm-branch-commits mailing list