[all-commits] [llvm/llvm-project] 7b4622: [libc++] Fix missing and incorrect push/pop macros...
Louis Dionne via All-commits
all-commits at lists.llvm.org
Thu Jan 25 12:48:58 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 7b4622514d232ce5f7110dd8b20d90e81127c467
https://github.com/llvm/llvm-project/commit/7b4622514d232ce5f7110dd8b20d90e81127c467
Author: Louis Dionne <ldionne.2 at gmail.com>
Date: 2024-01-25 (Thu, 25 Jan 2024)
Changed paths:
M libcxx/include/__algorithm/copy_move_common.h
M libcxx/include/__algorithm/equal.h
M libcxx/include/__algorithm/equal_range.h
M libcxx/include/__algorithm/fold.h
M libcxx/include/__algorithm/in_found_result.h
M libcxx/include/__algorithm/in_fun_result.h
M libcxx/include/__algorithm/in_in_out_result.h
M libcxx/include/__algorithm/in_in_result.h
M libcxx/include/__algorithm/in_out_out_result.h
M libcxx/include/__algorithm/includes.h
M libcxx/include/__algorithm/next_permutation.h
M libcxx/include/__algorithm/nth_element.h
M libcxx/include/__algorithm/partial_sort.h
M libcxx/include/__algorithm/partial_sort_copy.h
M libcxx/include/__algorithm/partition.h
M libcxx/include/__algorithm/prev_permutation.h
M libcxx/include/__algorithm/pstl_any_all_none_of.h
M libcxx/include/__algorithm/pstl_backends/cpu_backends/transform_reduce.h
M libcxx/include/__algorithm/pstl_copy.h
M libcxx/include/__algorithm/pstl_count.h
M libcxx/include/__algorithm/pstl_equal.h
M libcxx/include/__algorithm/pstl_fill.h
M libcxx/include/__algorithm/pstl_find.h
M libcxx/include/__algorithm/pstl_for_each.h
M libcxx/include/__algorithm/pstl_generate.h
M libcxx/include/__algorithm/pstl_is_partitioned.h
M libcxx/include/__algorithm/pstl_merge.h
M libcxx/include/__algorithm/pstl_move.h
M libcxx/include/__algorithm/pstl_replace.h
M libcxx/include/__algorithm/pstl_rotate_copy.h
M libcxx/include/__algorithm/pstl_sort.h
M libcxx/include/__algorithm/pstl_stable_sort.h
M libcxx/include/__algorithm/pstl_transform.h
M libcxx/include/__algorithm/ranges_all_of.h
M libcxx/include/__algorithm/ranges_any_of.h
M libcxx/include/__algorithm/ranges_binary_search.h
M libcxx/include/__algorithm/ranges_clamp.h
M libcxx/include/__algorithm/ranges_contains.h
M libcxx/include/__algorithm/ranges_copy.h
M libcxx/include/__algorithm/ranges_copy_backward.h
M libcxx/include/__algorithm/ranges_copy_if.h
M libcxx/include/__algorithm/ranges_copy_n.h
M libcxx/include/__algorithm/ranges_count.h
M libcxx/include/__algorithm/ranges_count_if.h
M libcxx/include/__algorithm/ranges_ends_with.h
M libcxx/include/__algorithm/ranges_equal.h
M libcxx/include/__algorithm/ranges_equal_range.h
M libcxx/include/__algorithm/ranges_fill.h
M libcxx/include/__algorithm/ranges_fill_n.h
M libcxx/include/__algorithm/ranges_find.h
M libcxx/include/__algorithm/ranges_find_end.h
M libcxx/include/__algorithm/ranges_find_first_of.h
M libcxx/include/__algorithm/ranges_find_if.h
M libcxx/include/__algorithm/ranges_find_if_not.h
M libcxx/include/__algorithm/ranges_for_each.h
M libcxx/include/__algorithm/ranges_for_each_n.h
M libcxx/include/__algorithm/ranges_generate.h
M libcxx/include/__algorithm/ranges_generate_n.h
M libcxx/include/__algorithm/ranges_includes.h
M libcxx/include/__algorithm/ranges_inplace_merge.h
M libcxx/include/__algorithm/ranges_is_heap.h
M libcxx/include/__algorithm/ranges_is_heap_until.h
M libcxx/include/__algorithm/ranges_is_partitioned.h
M libcxx/include/__algorithm/ranges_is_permutation.h
M libcxx/include/__algorithm/ranges_is_sorted.h
M libcxx/include/__algorithm/ranges_is_sorted_until.h
M libcxx/include/__algorithm/ranges_iterator_concept.h
M libcxx/include/__algorithm/ranges_lexicographical_compare.h
M libcxx/include/__algorithm/ranges_lower_bound.h
M libcxx/include/__algorithm/ranges_make_heap.h
M libcxx/include/__algorithm/ranges_max_element.h
M libcxx/include/__algorithm/ranges_merge.h
M libcxx/include/__algorithm/ranges_min_element.h
M libcxx/include/__algorithm/ranges_minmax_element.h
M libcxx/include/__algorithm/ranges_mismatch.h
M libcxx/include/__algorithm/ranges_move.h
M libcxx/include/__algorithm/ranges_move_backward.h
M libcxx/include/__algorithm/ranges_next_permutation.h
M libcxx/include/__algorithm/ranges_none_of.h
M libcxx/include/__algorithm/ranges_nth_element.h
M libcxx/include/__algorithm/ranges_partial_sort.h
M libcxx/include/__algorithm/ranges_partial_sort_copy.h
M libcxx/include/__algorithm/ranges_partition.h
M libcxx/include/__algorithm/ranges_partition_copy.h
M libcxx/include/__algorithm/ranges_partition_point.h
M libcxx/include/__algorithm/ranges_pop_heap.h
M libcxx/include/__algorithm/ranges_prev_permutation.h
M libcxx/include/__algorithm/ranges_push_heap.h
M libcxx/include/__algorithm/ranges_remove.h
M libcxx/include/__algorithm/ranges_remove_copy.h
M libcxx/include/__algorithm/ranges_remove_copy_if.h
M libcxx/include/__algorithm/ranges_remove_if.h
M libcxx/include/__algorithm/ranges_replace.h
M libcxx/include/__algorithm/ranges_replace_copy.h
M libcxx/include/__algorithm/ranges_replace_copy_if.h
M libcxx/include/__algorithm/ranges_replace_if.h
M libcxx/include/__algorithm/ranges_reverse_copy.h
M libcxx/include/__algorithm/ranges_rotate.h
M libcxx/include/__algorithm/ranges_rotate_copy.h
M libcxx/include/__algorithm/ranges_sample.h
M libcxx/include/__algorithm/ranges_search_n.h
M libcxx/include/__algorithm/ranges_set_difference.h
M libcxx/include/__algorithm/ranges_set_intersection.h
M libcxx/include/__algorithm/ranges_set_symmetric_difference.h
M libcxx/include/__algorithm/ranges_set_union.h
M libcxx/include/__algorithm/ranges_shuffle.h
M libcxx/include/__algorithm/ranges_sort.h
M libcxx/include/__algorithm/ranges_sort_heap.h
M libcxx/include/__algorithm/ranges_stable_partition.h
M libcxx/include/__algorithm/ranges_stable_sort.h
M libcxx/include/__algorithm/ranges_starts_with.h
M libcxx/include/__algorithm/ranges_swap_ranges.h
M libcxx/include/__algorithm/ranges_transform.h
M libcxx/include/__algorithm/ranges_unique.h
M libcxx/include/__algorithm/ranges_unique_copy.h
M libcxx/include/__algorithm/remove.h
M libcxx/include/__algorithm/remove_if.h
M libcxx/include/__algorithm/reverse.h
M libcxx/include/__algorithm/rotate.h
M libcxx/include/__algorithm/set_difference.h
M libcxx/include/__algorithm/set_intersection.h
M libcxx/include/__algorithm/set_symmetric_difference.h
M libcxx/include/__algorithm/set_union.h
M libcxx/include/__algorithm/shift_left.h
M libcxx/include/__algorithm/shift_right.h
M libcxx/include/__algorithm/sort.h
M libcxx/include/__algorithm/sort_heap.h
M libcxx/include/__algorithm/stable_partition.h
M libcxx/include/__algorithm/stable_sort.h
M libcxx/include/__algorithm/swap_ranges.h
M libcxx/include/__algorithm/unique.h
M libcxx/include/__algorithm/unique_copy.h
M libcxx/include/__algorithm/unwrap_iter.h
M libcxx/include/__algorithm/unwrap_range.h
M libcxx/include/__config
M libcxx/include/__filesystem/directory_iterator.h
M libcxx/include/__filesystem/path.h
M libcxx/include/__filesystem/recursive_directory_iterator.h
M libcxx/include/__format/format_arg.h
M libcxx/include/__format/format_context.h
M libcxx/include/__format/format_functions.h
M libcxx/include/__format/formatter_output.h
M libcxx/include/__format/write_escaped.h
M libcxx/include/__functional/function.h
M libcxx/include/__iterator/cpp17_iterator_concepts.h
M libcxx/include/__iterator/iterator_with_data.h
M libcxx/include/__memory/ranges_uninitialized_algorithms.h
M libcxx/include/__memory/raw_storage_iterator.h
M libcxx/include/__memory/shared_ptr.h
M libcxx/include/__memory/uninitialized_algorithms.h
M libcxx/include/__mutex/once_flag.h
M libcxx/include/__numeric/pstl_reduce.h
M libcxx/include/__numeric/pstl_transform_reduce.h
M libcxx/include/__numeric/reduce.h
M libcxx/include/__numeric/saturation_arithmetic.h
M libcxx/include/__numeric/transform_reduce.h
M libcxx/include/__ranges/counted.h
M libcxx/include/__ranges/drop_while_view.h
M libcxx/include/__ranges/elements_view.h
M libcxx/include/__ranges/filter_view.h
M libcxx/include/__ranges/iota_view.h
M libcxx/include/__ranges/join_view.h
M libcxx/include/__ranges/lazy_split_view.h
M libcxx/include/__ranges/repeat_view.h
M libcxx/include/__ranges/reverse_view.h
M libcxx/include/__ranges/single_view.h
M libcxx/include/__ranges/split_view.h
M libcxx/include/__ranges/take_while_view.h
M libcxx/include/__ranges/transform_view.h
M libcxx/include/__thread/jthread.h
M libcxx/include/__thread/thread.h
M libcxx/include/array
M libcxx/include/condition_variable
M libcxx/include/experimental/iterator
M libcxx/include/future
M libcxx/include/ios
M libcxx/include/map
M libcxx/include/ostream
M libcxx/include/queue
M libcxx/include/set
M libcxx/include/stack
M libcxx/include/strstream
M libcxx/include/unordered_map
M libcxx/include/unordered_set
M libcxx/test/libcxx/system_reserved_names.gen.py
Log Message:
-----------
[libc++] Fix missing and incorrect push/pop macros (#79204)
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
More information about the All-commits
mailing list