On Mon, Jun 2, 2025 at 7:33 PM Jonathan Wakely <jwak...@redhat.com> wrote:

> This replaces two implicit conversions from ptrdiff_t to size_t with
> explicit conversions that include unreachable hints for the ptrdiff_t
> value not being negative.
>
> libstdc++-v3/ChangeLog:
>
>         * include/bits/stl_vector.h (~_Vector_base): Add unreachable
>         hint for negative capacity and cast to size_t explicitly.
>         * include/bits/vector.tcc (vector::_M_realloc_append): Use
>         size() instead of end() - begin().
> ---
>
> Tested x86_64-linux.
>
LGTM.

>
>  libstdc++-v3/include/bits/stl_vector.h | 6 ++++--
>  libstdc++-v3/include/bits/vector.tcc   | 2 +-
>  2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/stl_vector.h
> b/libstdc++-v3/include/bits/stl_vector.h
> index 5c0c227d8c49..f2c1bce1e386 100644
> --- a/libstdc++-v3/include/bits/stl_vector.h
> +++ b/libstdc++-v3/include/bits/stl_vector.h
> @@ -372,8 +372,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
>        _GLIBCXX20_CONSTEXPR
>        ~_Vector_base() _GLIBCXX_NOEXCEPT
>        {
> -       _M_deallocate(_M_impl._M_start,
> -                     _M_impl._M_end_of_storage - _M_impl._M_start);
> +       ptrdiff_t __n = _M_impl._M_end_of_storage - _M_impl._M_start;
> +       if (__n < 0)
> +         __builtin_unreachable();
> +       _M_deallocate(_M_impl._M_start, size_t(__n));
>        }
>
>      public:
> diff --git a/libstdc++-v3/include/bits/vector.tcc
> b/libstdc++-v3/include/bits/vector.tcc
> index 801d9f049d02..70ead1d70836 100644
> --- a/libstdc++-v3/include/bits/vector.tcc
> +++ b/libstdc++-v3/include/bits/vector.tcc
> @@ -576,7 +576,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
>         __builtin_unreachable();
>        pointer __old_start = this->_M_impl._M_start;
>        pointer __old_finish = this->_M_impl._M_finish;
> -      const size_type __elems = end() - begin();
> +      const size_type __elems = size();
>        pointer __new_start(this->_M_allocate(__len));
>        pointer __new_finish(__new_start);
>
> --
> 2.49.0
>
>

Reply via email to