re PR libstdc++/63920 (Any regular expression should not match an empty sequence if match_not_null is specified)

PR libstdc++/63920
	* include/bits/regex_executor.h: Make _M_begin non const.
	* include/bits/regex_executor.tcc (_Executor<>::_M_search): Increase
	_M_begin in search algorithm, so that _M_begin is treated as
	"current start position" for each search iteration.
	* testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: New
	testcase.

From-SVN: r218037
This commit is contained in:
Tim Shen 2014-11-25 05:43:04 +00:00 committed by Tim Shen
parent 5534b254ae
commit 02ba3fc22d
4 changed files with 20 additions and 8 deletions

View file

@ -1,3 +1,13 @@
2014-11-25 Tim Shen <timshen@google.com>
PR libstdc++/63920
* include/bits/regex_executor.h: Make _M_begin non const.
* include/bits/regex_executor.tcc (_Executor<>::_M_search): Increase
_M_begin in search algorithm, so that _M_begin is treated as
"current start position" for each search iteration.
* testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: New
testcase.
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
PR bootstrap/63784

View file

@ -205,7 +205,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
public:
_ResultsVec _M_cur_results;
_BiIter _M_current;
const _BiIter _M_begin;
_BiIter _M_begin;
const _BiIter _M_end;
const _RegexT& _M_re;
const _NFAT& _M_nfa;

View file

@ -39,17 +39,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
_M_search()
{
if (_M_search_from_first())
return true;
if (_M_flags & regex_constants::match_continuous)
return _M_search_from_first();
auto __cur = _M_begin;
do
return false;
_M_flags |= regex_constants::match_prev_avail;
while (_M_begin != _M_end)
{
_M_current = __cur;
if (_M_main(_Match_mode::_Prefix))
++_M_begin;
if (_M_search_from_first())
return true;
}
// Continue when __cur == _M_end
while (__cur++ != _M_end);
return false;
}

View file

@ -65,6 +65,8 @@ test01()
regex_constants::match_prev_avail));
VERIFY( regex_search_debug("ba"+1, regex("\\Ba"),
regex_constants::match_prev_avail));
// PR libstdc++/63920
VERIFY(!regex_search_debug("a", regex("b*"), regex_constants::match_not_null));
}
int