]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR libstdc++/83600 fix end iterator for unready std::match_results
authorJonathan Wakely <jwakely@redhat.com>
Fri, 5 Jan 2018 22:48:00 +0000 (22:48 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 5 Jan 2018 22:48:00 +0000 (22:48 +0000)
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: r256298

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/regex.h
libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc

index aa81b4b705fa95b57601934199334397c4fc936a..0f233f2a076a835f9e40b50e58201d0c30d6b351 100644 (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.
index 983bdef387124e0744fb087b89c9d0236bca0792..cf7aa3ee4bff2f367912659fdb0fdb31218fc6f7 100644 (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.
index 80b8bf767e57a74a9683f261c068ab56dfd8f778..82ae40dc2194c3c39bef54aa2bc7d08c03680238 100644 (file)
@@ -32,6 +32,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()
@@ -41,6 +43,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
index a4f68c1fc0db38f16008107362d52a35dcde8d89..88fe6a4f54c5010ade5eacb94b591e106db21b5c 100644 (file)
@@ -32,6 +32,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()
@@ -41,6 +43,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