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 >