Fix <rdar://problem/10255403> match_results::begin() is off by one

llvm-svn: 141494
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 2a4812fd0463d5320fe7871df67103219818bbb5
diff --git a/include/regex b/include/regex
index 5e19569..760f4eb 100644
--- a/include/regex
+++ b/include/regex
@@ -5210,11 +5210,11 @@
     const_reference suffix() const {return __suffix_;}
 
     _LIBCPP_INLINE_VISIBILITY
-    const_iterator begin() const {return empty() ? __matches_.end() : __matches_.begin() + 1;}
+    const_iterator begin() const {return empty() ? __matches_.end() : __matches_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator end() const {return __matches_.end();}
     _LIBCPP_INLINE_VISIBILITY
-    const_iterator cbegin() const {return empty() ? __matches_.end() : __matches_.begin() + 1;}
+    const_iterator cbegin() const {return empty() ? __matches_.end() : __matches_.begin();}
     _LIBCPP_INLINE_VISIBILITY
     const_iterator cend() const {return __matches_.end();}
 
diff --git a/test/re/re.results/re.results.acc/begin_end.pass.cpp b/test/re/re.results/re.results.acc/begin_end.pass.cpp
index e71dcac..80c06f2 100644
--- a/test/re/re.results/re.results.acc/begin_end.pass.cpp
+++ b/test/re/re.results/re.results.acc/begin_end.pass.cpp
@@ -27,8 +27,8 @@
     std::match_results<const char*>::const_iterator i = m.begin();
     std::match_results<const char*>::const_iterator e = m.end();
 
-    assert(e - i == m.size() - 1);
-    for (int j = 1; i != e; ++i, ++j)
+    assert(e - i == m.size());
+    for (int j = 0; i != e; ++i, ++j)
         assert(*i == m[j]);
 }
 
diff --git a/test/re/re.results/re.results.acc/cbegin_cend.pass.cpp b/test/re/re.results/re.results.acc/cbegin_cend.pass.cpp
index f56fe00..a983c8a 100644
--- a/test/re/re.results/re.results.acc/cbegin_cend.pass.cpp
+++ b/test/re/re.results/re.results.acc/cbegin_cend.pass.cpp
@@ -27,8 +27,8 @@
     std::match_results<const char*>::const_iterator i = m.cbegin();
     std::match_results<const char*>::const_iterator e = m.cend();
 
-    assert(e - i == m.size() - 1);
-    for (int j = 1; i != e; ++i, ++j)
+    assert(e - i == m.size());
+    for (int j = 0; i != e; ++i, ++j)
         assert(*i == m[j]);
 }