From 8fd84bc009b3073666a24047c78a04c19eeab752 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 18 Jun 2024 10:57:45 +0100 Subject: [PATCH] libstdc++: Add debug assertions to std::vector [PR103191] This adds debug assertions for std::vector element access. libstdc++-v3/ChangeLog: PR libstdc++/103191 * include/bits/stl_bvector.h (vector::operator[]) (vector::front, vector::back): Add debug assertions. * testsuite/23_containers/vector/bool/element_access/constexpr.cc: Remove dg-error that no longer triggers. --- libstdc++-v3/include/bits/stl_bvector.h | 30 +++++++++++++++---- .../vector/bool/element_access/constexpr.cc | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 52153cadf8f7..8685cc64cc44 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -1084,12 +1084,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR reference operator[](size_type __n) - { return begin()[__n]; } + { + __glibcxx_requires_subscript(__n); + return begin()[__n]; + } _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR const_reference operator[](size_type __n) const - { return begin()[__n]; } + { + __glibcxx_requires_subscript(__n); + return begin()[__n]; + } protected: _GLIBCXX20_CONSTEXPR @@ -1133,22 +1139,34 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR reference front() - { return *begin(); } + { + __glibcxx_requires_nonempty(); + return *begin(); + } _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR const_reference front() const - { return *begin(); } + { + __glibcxx_requires_nonempty(); + return *begin(); + } _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR reference back() - { return *(end() - 1); } + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR const_reference back() const - { return *(end() - 1); } + { + __glibcxx_requires_nonempty(); + return *(end() - 1); + } _GLIBCXX20_CONSTEXPR void diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc index bff9f7b4e0fc..7c60e5db4d14 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc @@ -115,4 +115,4 @@ template constexpr std::true_type access_empty_front() { return {}; } -static_assert( ! access_empty_front() ); // { dg-error "ambiguous" "PR 103191" { target { ! debug_mode } } } +static_assert( ! access_empty_front() ); -- 2.47.2