aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-12-27 22:18:08 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-12-27 22:18:08 +0000
commitecba3566861996cee8635e4c98b0fc4154e64659 (patch)
tree645c1fd77c89183510d9e77d2460ea3237acee4e
parent8afe2df012564c108406069fea473c02463db6fb (diff)
downloadgcc-ecba3566861996cee8635e4c98b0fc4154e64659.zip
gcc-ecba3566861996cee8635e4c98b0fc4154e64659.tar.gz
gcc-ecba3566861996cee8635e4c98b0fc4154e64659.tar.bz2
PR libstdc++/83600 fix end iterator for unready std::match_results
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: r256014
-rw-r--r--libstdc++-v3/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/regex.h2
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc4
-rw-r--r--libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc4
4 files changed, 16 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4474f5e..8594670 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,12 @@
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.
+
PR libstdc++/83598
* include/bits/regex.h (basic_regex): Don't modify flags passed to
constructors.
diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h
index 0d97d53..d85be41 100644
--- a/libstdc++-v3/include/bits/regex.h
+++ b/libstdc++-v3/include/bits/regex.h
@@ -1749,7 +1749,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.
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
index a6d1375..c217758 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/char/default.cc
@@ -30,6 +30,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()
@@ -37,6 +39,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
diff --git a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
index f1d0a3f..22e25e1 100644
--- a/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
+++ b/libstdc++-v3/testsuite/28_regex/match_results/ctors/wchar_t/default.cc
@@ -30,6 +30,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()
@@ -37,6 +39,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