From 5e56c30413b32d698a0441d11f34010d4a35ed92 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Wed, 28 Jan 2015 22:22:35 +0000 Subject: [PATCH] Fix for PR22061 by K-ballo git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@227384 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/regex | 14 ++++++++++++-- .../re/re.results/re.results.acc/index.pass.cpp | 9 ++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/regex b/include/regex index 39e106c4..fb0f7d8c 100644 --- a/include/regex +++ b/include/regex @@ -5601,12 +5601,17 @@ basic_regex<_CharT, _Traits>::__match_at_start_ecma( __node* __st = __start_.get(); if (__st) { + sub_match __unmatched; + __unmatched.first = __last; + __unmatched.second = __last; + __unmatched.matched = false; + __states.push_back(__state()); __states.back().__do_ = 0; __states.back().__first_ = __first; __states.back().__current_ = __first; __states.back().__last_ = __last; - __states.back().__sub_matches_.resize(mark_count()); + __states.back().__sub_matches_.resize(mark_count(), __unmatched); __states.back().__loop_data_.resize(__loop_count()); __states.back().__node_ = __st; __states.back().__flags_ = __flags; @@ -5746,12 +5751,17 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_subs( __node* __st = __start_.get(); if (__st) { + sub_match __unmatched; + __unmatched.first = __last; + __unmatched.second = __last; + __unmatched.matched = false; + __states.push_back(__state()); __states.back().__do_ = 0; __states.back().__first_ = __first; __states.back().__current_ = __first; __states.back().__last_ = __last; - __states.back().__sub_matches_.resize(mark_count()); + __states.back().__sub_matches_.resize(mark_count(), __unmatched); __states.back().__loop_data_.resize(__loop_count()); __states.back().__node_ = __st; __states.back().__flags_ = __flags; diff --git a/test/std/re/re.results/re.results.acc/index.pass.cpp b/test/std/re/re.results/re.results.acc/index.pass.cpp index b798969c..79d4b9a2 100644 --- a/test/std/re/re.results/re.results.acc/index.pass.cpp +++ b/test/std/re/re.results/re.results.acc/index.pass.cpp @@ -17,11 +17,13 @@ #include void -test() +test(std::regex_constants::syntax_option_type syntax) { std::match_results m; const char s[] = "abcdefghijk"; - assert(std::regex_search(s, m, std::regex("cd((e)fg)hi"))); + assert(std::regex_search(s, m, std::regex("cd((e)fg)hi|(z)", syntax))); + + assert(m.size() == 4); assert(m[0].first == s+2); assert(m[0].second == s+9); @@ -46,5 +48,6 @@ test() int main() { - test(); + test(std::regex_constants::ECMAScript); + test(std::regex_constants::extended); }