mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -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>
|
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR bootstrap/63784
|
PR bootstrap/63784
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
public:
|
public:
|
||||||
_ResultsVec _M_cur_results;
|
_ResultsVec _M_cur_results;
|
||||||
_BiIter _M_current;
|
_BiIter _M_current;
|
||||||
const _BiIter _M_begin;
|
_BiIter _M_begin;
|
||||||
const _BiIter _M_end;
|
const _BiIter _M_end;
|
||||||
const _RegexT& _M_re;
|
const _RegexT& _M_re;
|
||||||
const _NFAT& _M_nfa;
|
const _NFAT& _M_nfa;
|
||||||
|
|
|
||||||
|
|
@ -39,17 +39,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
|
bool _Executor<_BiIter, _Alloc, _TraitsT, __dfs_mode>::
|
||||||
_M_search()
|
_M_search()
|
||||||
{
|
{
|
||||||
|
if (_M_search_from_first())
|
||||||
|
return true;
|
||||||
if (_M_flags & regex_constants::match_continuous)
|
if (_M_flags & regex_constants::match_continuous)
|
||||||
return _M_search_from_first();
|
return false;
|
||||||
auto __cur = _M_begin;
|
_M_flags |= regex_constants::match_prev_avail;
|
||||||
do
|
while (_M_begin != _M_end)
|
||||||
{
|
{
|
||||||
_M_current = __cur;
|
++_M_begin;
|
||||||
if (_M_main(_Match_mode::_Prefix))
|
if (_M_search_from_first())
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Continue when __cur == _M_end
|
|
||||||
while (__cur++ != _M_end);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,8 @@ test01()
|
||||||
regex_constants::match_prev_avail));
|
regex_constants::match_prev_avail));
|
||||||
VERIFY( regex_search_debug("ba"+1, regex("\\Ba"),
|
VERIFY( regex_search_debug("ba"+1, regex("\\Ba"),
|
||||||
regex_constants::match_prev_avail));
|
regex_constants::match_prev_avail));
|
||||||
|
// PR libstdc++/63920
|
||||||
|
VERIFY(!regex_search_debug("a", regex("b*"), regex_constants::match_not_null));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue