diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-12-27 22:18:08 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-12-27 22:18:08 +0000 |
commit | ecba3566861996cee8635e4c98b0fc4154e64659 (patch) | |
tree | 645c1fd77c89183510d9e77d2460ea3237acee4e | |
parent | 8afe2df012564c108406069fea473c02463db6fb (diff) | |
download | gcc-ecba3566861996cee8635e4c98b0fc4154e64659.zip gcc-ecba3566861996cee8635e4c98b0fc4154e64659.tar.gz gcc-ecba3566861996cee8635e4c98b0fc4154e64659.tar.bz2 |
PR libstdc++/83600 fix end iterator for unready std::match_results
PR libstdc++/83600
* include/bits/regex.h (match_results::end()): Return valid iterator
when not ready.
* testsuite/28_regex/match_results/ctors/char/default.cc: Check that
unready objects are empty and have equal begin and end iterators.
* testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise.
From-SVN: r256014
4 files changed, 16 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4474f5e..8594670 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2017-12-27 Jonathan Wakely <jwakely@redhat.com> + PR libstdc++/83600 + * include/bits/regex.h (match_results::end()): Return valid iterator + when not ready. + * testsuite/28_regex/match_results/ctors/char/default.cc: Check that + unready objects are empty and have equal begin and end iterators. + * testsuite/28_regex/match_results/ctors/wchar_t/default.cc: Likewise. + PR libstdc++/83598 * include/bits/regex.h (basic_regex): Don't modify flags passed to constructors. diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 0d97d53..d85be41 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -1749,7 +1749,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11 */ const_iterator end() const - { return _Base_type::end() - 3; } + { return _Base_type::end() - (empty() ? 0 : 3); } /** * @brief Gets an iterator to one-past-the-end of the collection. diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc index a6d1375..c217758 100644 --- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc +++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc @@ -30,6 +30,8 @@ void test01() std::cmatch cm; VERIFY( cm.size() == 0 ); VERIFY( !cm.ready() ); + VERIFY( cm.empty() ); + VERIFY( cm.begin() == cm.end() ); // PR libstdc++/83600 } void test02() @@ -37,6 +39,8 @@ void test02() std::smatch sm; VERIFY( sm.size() == 0 ); VERIFY( !sm.ready() ); + VERIFY( sm.empty() ); + VERIFY( sm.begin() == sm.end() ); // PR libstdc++/83600 } int diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc index f1d0a3f..22e25e1 100644 --- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc +++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc @@ -30,6 +30,8 @@ void test01() std::wcmatch cm; VERIFY( cm.size() == 0 ); VERIFY( !cm.ready() ); + VERIFY( cm.empty() ); + VERIFY( cm.begin() == cm.end() ); // PR libstdc++/83600 } void test02() @@ -37,6 +39,8 @@ void test02() std::wsmatch sm; VERIFY( sm.size() == 0 ); VERIFY( !sm.ready() ); + VERIFY( sm.empty() ); + VERIFY( sm.begin() == sm.end() ); // PR libstdc++/83600 } int |