]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Add debug assertions to std::vector<bool> [PR103191]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 18 Jun 2024 09:57:45 +0000 (10:57 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 27 Jun 2024 08:39:41 +0000 (09:39 +0100)
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.

libstdc++-v3/include/bits/stl_bvector.h
libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc

index 52153cadf8f70a0b10bc7d7c6a9777eed6804b93..8685cc64cc4454c8b69c868eec610419613d06d7 100644 (file)
@@ -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
index bff9f7b4e0fc8403a2a6731ef16e7a7439ba2ea1..7c60e5db4d145ad4e456afdd6260f162ebbc2caa 100644 (file)
@@ -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() );