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:
parent
5534b254ae
commit
02ba3fc22d
4 changed files with 20 additions and 8 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue