diff options
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/include/std/text_encoding | 6 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/text_encoding/members.cc | 19 |
2 files changed, 20 insertions, 5 deletions
diff --git a/libstdc++-v3/include/std/text_encoding b/libstdc++-v3/include/std/text_encoding index 48742dc..6fcaed1 100644 --- a/libstdc++-v3/include/std/text_encoding +++ b/libstdc++-v3/include/std/text_encoding @@ -575,7 +575,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && _M_rep[__n - 1]._M_id == _M_id) [[likely]] _M_rep += __n; else - *this == _Iterator{}; + *this = _Iterator{}; } else if (__n < 0) { @@ -583,7 +583,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION && _M_rep[__n]._M_id == _M_id) [[likely]] _M_rep += __n; else - *this == _Iterator{}; + *this = _Iterator{}; } } if (__n != 0) @@ -645,7 +645,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } private: - friend class text_encoding; + friend struct text_encoding; constexpr explicit _Iterator(const _Rep* __r) noexcept diff --git a/libstdc++-v3/testsuite/std/text_encoding/members.cc b/libstdc++-v3/testsuite/std/text_encoding/members.cc index adbd74a..2536532 100644 --- a/libstdc++-v3/testsuite/std/text_encoding/members.cc +++ b/libstdc++-v3/testsuite/std/text_encoding/members.cc @@ -70,10 +70,25 @@ test_every_id() auto end = aliases.end(); VERIFY( (begin + std::ranges::distance(aliases)) == end ); #ifndef _GLIBCXX_ASSERTIONS - // This is an error, but with assertions disabled is guaranteed safe: + // These ops violate preconditions, but as libstdc++ extensions they are + // guaranteed to either assert or have well-defined behaviour. + + // This erroneously returns ""sv: VERIFY( begin[std::ranges::distance(aliases)] == ""sv ); // Likewise: - VERIFY( begin[999999] == *begin ); + VERIFY( begin[999999] == ""sv ); + + auto iter = begin; + std::ranges::advance(iter, end); + // Erroneously sets iter to a value-initialized state. + ++iter; + VERIFY( iter == decltype(iter){} ); + VERIFY( *iter == ""sv ); + + iter = begin; + // Erroneously sets iter to a value-initialized state. + --iter; + VERIFY( iter == decltype(iter){} ); #endif } } |