[all-commits] [llvm/llvm-project] d41c6d: [libc++] Rationalize our treatment of contiguous i...

Quuxplusone via All-commits all-commits at lists.llvm.org
Wed Feb 3 13:29:34 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: d41c6d51cbadbbd0f81c6ac0d6628d01b881e2a5
      https://github.com/llvm/llvm-project/commit/d41c6d51cbadbbd0f81c6ac0d6628d01b881e2a5
  Author: Arthur O'Dwyer <arthur.j.odwyer at gmail.com>
  Date:   2021-02-03 (Wed, 03 Feb 2021)

  Changed paths:
    M libcxx/include/__memory/pointer_traits.h
    M libcxx/include/algorithm
    M libcxx/include/filesystem
    M libcxx/include/iterator
    M libcxx/include/memory
    A libcxx/test/libcxx/iterators/contiguous_iterators.pass.cpp
    M libcxx/test/libcxx/iterators/trivial_iterators.pass.cpp
    A libcxx/test/std/algorithms/alg.modifying.operations/alg.move/contiguous_trivial_optimization.pass.cpp
    M libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp
    M libcxx/test/std/iterators/predef.iterators/reverse.iterators/reverse.iterator/types.pass.cpp
    M libcxx/test/support/test_iterators.h

  Log Message:
  -----------
  [libc++] Rationalize our treatment of contiguous iterators and __unwrap_iter().

- Implement C++20's changes to `reverse_iterator`, so that it won't be
    accidentally counted as a contiguous iterator in C++20 mode.
- Implement C++20's changes to `move_iterator` as well.
- `move_iterator` should not be contiguous. This fixes a bug where
    we optimized `std::copy`-of-move-iterators in an observable way.
    Add a regression test for that bugfix.
- Add libcxx tests for `__is_cpp17_contiguous_iterator` of all relevant
    standard iterator types. Particularly check that vector::iterator
    is still considered contiguous in all C++ modes, even C++03.

After this patch, there continues to be no supported way to write your
own iterator type in C++17-and-earlier such that libc++ will consider it
"contiguous"; however, we now fully support the C++20 approach (in C++20
mode only). If you want user-defined contiguous iterators in C++17-and-earlier,
libc++'s position is "please upgrade to C++20."

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




More information about the All-commits mailing list