diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-06-18 10:57:45 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-06-27 09:39:41 +0100 |
commit | 8fd84bc009b3073666a24047c78a04c19eeab752 (patch) | |
tree | 93511f5b18b90fdcd28127a35b80b14c7a54c330 | |
parent | cfc9fa3bdddc1af59b7854937b99516067fd8c63 (diff) | |
download | gcc-8fd84bc009b3073666a24047c78a04c19eeab752.zip gcc-8fd84bc009b3073666a24047c78a04c19eeab752.tar.gz gcc-8fd84bc009b3073666a24047c78a04c19eeab752.tar.bz2 |
libstdc++: Add debug assertions to std::vector<bool> [PR103191]
This adds debug assertions for std::vector<bool> element access.
libstdc++-v3/ChangeLog:
PR libstdc++/103191
* include/bits/stl_bvector.h (vector<bool>::operator[])
(vector<bool>::front, vector<bool>::back): Add debug assertions.
* testsuite/23_containers/vector/bool/element_access/constexpr.cc:
Remove dg-error that no longer triggers.
-rw-r--r-- | libstdc++-v3/include/bits/stl_bvector.h | 30 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/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 52153ca..8685cc6 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 bff9f7b..7c60e5d 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<typename T = bool> 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() ); |