PR libstdc++/83600 fix end iterator for unready std::match_results

Backport from mainline
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.

From-SVN: r256292
This commit is contained in:
Jonathan Wakely 2018-01-05 22:22:28 +00:00 committed by Jonathan Wakely
parent a6d46487f3
commit 7a2b2be984
4 changed files with 19 additions and 1 deletions

View File

@ -3,6 +3,16 @@
Backport from mainline
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.
Backport from mainline
2017-12-27 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/83598
* include/bits/regex.h (basic_regex): Don't modify flags passed to
constructors.

View File

@ -1751,7 +1751,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.

View File

@ -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

View File

@ -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