[libcxx-commits] [PATCH] D147089: [libc++] Add assertions for potential OOB reads in std::sort
    Louis Dionne via Phabricator via libcxx-commits 
    libcxx-commits at lists.llvm.org
       
    Wed May 17 06:58:39 PDT 2023
    
    
  
ldionne added a comment.
In D147089#4344102 <https://reviews.llvm.org/D147089#4344102>, @alexfh wrote:
> Hi Louis, we've started seeing compilation errors in code using custom iterators after this patch:
>
>   .../include/c++/v1/__algorithm/sort.h:681:14 no viable overloaded '='
>       *__begin = _Ops::__iter_move(__pivot_pos);
>
> One example that relies on an open-source library is here https://gcc.godbolt.org/z/be7xMhcn3, but we have other instances as well. Is this a intended effect of this patch? If so, can we have an escape hatch?
>
> FWIW, the error doesn't depend on whether `_LIBCPP_ENABLE_ASSERTIONS` is enabled.
Thanks for reducing to a godbolt! This happens because `__begin` was made `const` in the new code and we're assigning to the result of `*__begin`. This is required to be valid since `operator*` on iterators is supposed to be const (see https://en.cppreference.com/w/cpp/iterator/indirectly_readable). So the code that fails should be fixed.
That being said, I can make `__begin` non-const for the time being to give you time to fix up these places, but I'll mark it with a TODO to make `const` again in LLVM 18. How does that sound?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147089/new/
https://reviews.llvm.org/D147089
    
    
More information about the libcxx-commits
mailing list