[PATCH] libstdc++: Add assertions to std::list::pop_{front,back}

Jonathan Wakely jwakely@redhat.com
Thu Mar 6 11:32:37 GMT 2025


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.
---

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



More information about the Libstdc++ mailing list