libstdc++: Enable assertions in constexpr string_view members [PR 71960]
authorJonathan Wakely <jwakely@redhat.com>
Wed, 26 Aug 2020 13:47:51 +0000 (14:47 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 26 Aug 2020 13:48:49 +0000 (14:48 +0100)
Since GCC 6.1 there is no reason we can't just use __glibcxx_assert in
constexpr functions in string_view. As long as the condition is true,
there will be no call to std::__replacement_assert that would make the
function ineligible for constant evaluation.

PR libstdc++/71960
* include/experimental/string_view (basic_string_view):
Enable debug assertions.
* include/std/string_view (basic_string_view):
Likewise.

libstdc++-v3/include/experimental/string_view
libstdc++-v3/include/std/string_view

index 629db577c29a3f2969c7245f7a2dcfd9a0ec1d6e..5567184cf0eb86312fe4c47336afdf0f42f1bee8 100644 (file)
@@ -179,8 +179,7 @@ inline namespace fundamentals_v1
       constexpr const _CharT&
       operator[](size_type __pos) const
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(__pos < this->_M_len);
+       __glibcxx_assert(__pos < this->_M_len);
        return *(this->_M_str + __pos);
       }
 
@@ -199,16 +198,14 @@ inline namespace fundamentals_v1
       constexpr const _CharT&
       front() const
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(this->_M_len > 0);
+       __glibcxx_assert(this->_M_len > 0);
        return *this->_M_str;
       }
 
       constexpr const _CharT&
       back() const
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(this->_M_len > 0);
+       __glibcxx_assert(this->_M_len > 0);
        return *(this->_M_str + this->_M_len - 1);
       }
 
index ca0d6265098159659b2cffdd422975ffb39185fa..f05ff32d9e5f3792c95d31e87a8b088c46cbc103 100644 (file)
@@ -207,8 +207,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr const_reference
       operator[](size_type __pos) const noexcept
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(__pos < this->_M_len);
+       __glibcxx_assert(__pos < this->_M_len);
        return *(this->_M_str + __pos);
       }
 
@@ -225,16 +224,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr const_reference
       front() const noexcept
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(this->_M_len > 0);
+       __glibcxx_assert(this->_M_len > 0);
        return *this->_M_str;
       }
 
       constexpr const_reference
       back() const noexcept
       {
-       // TODO: Assert to restore in a way compatible with the constexpr.
-       // __glibcxx_assert(this->_M_len > 0);
+       __glibcxx_assert(this->_M_len > 0);
        return *(this->_M_str + this->_M_len - 1);
       }