Fix for PR22061 by K-ballo

llvm-svn: 227384
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 538fec0e59c72a5a8c8f9a6a53fb1ac3334c6ee8
diff --git a/include/regex b/include/regex
index 39e106c..fb0f7d8 100644
--- a/include/regex
+++ b/include/regex
@@ -5601,12 +5601,17 @@
     __node* __st = __start_.get();
     if (__st)
     {
+        sub_match<const _CharT*> __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 @@
     __node* __st = __start_.get();
     if (__st)
     {
+        sub_match<const _CharT*> __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 b798969..79d4b9a 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 <cassert>
 
 void
-test()
+test(std::regex_constants::syntax_option_type syntax)
 {
     std::match_results<const char*> 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 @@
 
 int main()
 {
-    test();
+    test(std::regex_constants::ECMAScript);
+    test(std::regex_constants::extended);
 }