Bootstrapped and tested.

Thanks!


-- 
Regards,
Tim Shen
commit f17155183b9ae1283d04f3bbdb61d05d9279ebe4
Author: timshen <tims...@google.com>
Date:   Tue Nov 18 00:07:28 2014 -0800

        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.

diff --git a/libstdc++-v3/include/bits/regex_executor.h 
b/libstdc++-v3/include/bits/regex_executor.h
index b26992c..2d7796f 100644
--- a/libstdc++-v3/include/bits/regex_executor.h
+++ b/libstdc++-v3/include/bits/regex_executor.h
@@ -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;
diff --git a/libstdc++-v3/include/bits/regex_executor.tcc 
b/libstdc++-v3/include/bits/regex_executor.tcc
index 38d4781..a973667 100644
--- a/libstdc++-v3/include/bits/regex_executor.tcc
+++ b/libstdc++-v3/include/bits/regex_executor.tcc
@@ -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;
     }
 
diff --git 
a/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc 
b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
index 45ad0f6..6b038ee 100644
--- a/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
+++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_search/ecma/flags.cc
@@ -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

Reply via email to