summaryrefslogtreecommitdiffstats
path: root/include/regex
diff options
context:
space:
mode:
authorTim Shen <timshen91@gmail.com>2016-10-21 20:41:47 +0000
committerTim Shen <timshen91@gmail.com>2016-10-21 20:41:47 +0000
commit741cb8b8e6092bbf88f9bd8fec76104f69bf18fb (patch)
tree9def8f76aa3216bdd69e2d649ec45e06dad86dac /include/regex
parent2d164cbf6fb3c2058ad941f8b19b13572a9fc905 (diff)
downloadexternal_libcxx-741cb8b8e6092bbf88f9bd8fec76104f69bf18fb.tar.gz
external_libcxx-741cb8b8e6092bbf88f9bd8fec76104f69bf18fb.tar.bz2
external_libcxx-741cb8b8e6092bbf88f9bd8fec76104f69bf18fb.zip
[libcxx] Support std::regex_constants::match_not_null
Summary: Fixes PR21597. Reviewers: mclow.lists, EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25595 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@284881 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/regex')
-rw-r--r--include/regex18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/regex b/include/regex
index f8fb6af82..975f64010 100644
--- a/include/regex
+++ b/include/regex
@@ -5555,6 +5555,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_ecma(
switch (__s.__do_)
{
case __state::__end_state:
+ if (__flags & regex_constants::match_not_null &&
+ __s.__current_ == __first)
+ {
+ __states.pop_back();
+ break;
+ }
__m.__matches_[0].first = __first;
__m.__matches_[0].second = _VSTD::next(__first, __s.__current_ - __first);
__m.__matches_[0].matched = true;
@@ -5618,6 +5624,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_nosubs(
switch (__s.__do_)
{
case __state::__end_state:
+ if (__flags & regex_constants::match_not_null &&
+ __s.__current_ == __first)
+ {
+ __states.pop_back();
+ break;
+ }
if (!__matched || __highest_j < __s.__current_ - __s.__first_)
__highest_j = __s.__current_ - __s.__first_;
__matched = true;
@@ -5703,6 +5715,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_subs(
switch (__s.__do_)
{
case __state::__end_state:
+ if (__flags & regex_constants::match_not_null &&
+ __s.__current_ == __first)
+ {
+ __states.pop_back();
+ break;
+ }
if (!__matched || __highest_j < __s.__current_ - __s.__first_)
{
__highest_j = __s.__current_ - __s.__first_;