On Thu, Mar 6, 2025 at 6:37 AM Jonathan Wakely <jwak...@redhat.com> wrote:
>
> The recently-approved Standard Library Hardening proposal (P3471R4)
> gives pop_front and pop_back member functions hardened preconditions,
> but std::list was missing assertions on them. Our other sequence
> containers do have assertions on those members.
>
> libstdc++-v3/ChangeLog:
>
>         * include/bits/stl_list.h (list::pop_front, list::pop_back):
>         Add non-empty assertions.

LGTM

> ---
>
> Tested x86_64-linux.
>
> Since it's a conformance requirement that we diagnose Hardened
> Preconditions, we should probably have tests that verify these
> assertions exist, but ... I ... haven't done that.
>
>  libstdc++-v3/include/bits/stl_list.h | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/bits/stl_list.h 
> b/libstdc++-v3/include/bits/stl_list.h
> index f987d8b9d0a..82ccb50ff18 100644
> --- a/libstdc++-v3/include/bits/stl_list.h
> +++ b/libstdc++-v3/include/bits/stl_list.h
> @@ -1784,7 +1784,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
>         */
>        void
>        pop_front() _GLIBCXX_NOEXCEPT
> -      { this->_M_erase(begin()); }
> +      {
> +       __glibcxx_requires_nonempty();
> +       this->_M_erase(begin());
> +      }
>
>        /**
>         *  @brief  Add data to the end of the %list.
> @@ -1833,7 +1836,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
>         */
>        void
>        pop_back() _GLIBCXX_NOEXCEPT
> -      { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); }
> +      {
> +       __glibcxx_requires_nonempty();
> +       this->_M_erase(iterator(this->_M_impl._M_node._M_prev));
> +      }
>
>  #if __cplusplus >= 201103L
>        /**
> --
> 2.48.1
>

Reply via email to