[libcxx-commits] [libcxx] [libc++] <regex>: Make unmatched backrefs always succeed in ECMAScript mode (PR #154442)

via libcxx-commits libcxx-commits at lists.llvm.org
Tue Aug 19 18:09:38 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff HEAD~1 HEAD --extensions ,cpp -- libcxx/include/regex libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
``````````

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/libcxx/include/regex b/libcxx/include/regex
index ba69f5681..205ccd625 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -1699,7 +1699,8 @@ void __back_ref<_CharT, _UnmatchedAlwaysSucceed>::__exec(__state& __s) const {
     }
   } else if constexpr (_UnmatchedAlwaysSucceed) {
     __s.__do_   = __state::__accept_but_not_consume;
-    __s.__node_ = this->first();;
+    __s.__node_ = this->first();
+    ;
   } else {
     __s.__do_   = __state::__reject;
     __s.__node_ = nullptr;
diff --git a/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp b/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
index a6a1a9cf8..89273acc1 100644
--- a/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
+++ b/libcxx/test/std/re/re.alg/re.alg.search/ecma.pass.cpp
@@ -763,19 +763,19 @@ int main(int, char**)
         assert(m.str(0) == s);
     }
     {
-        std::cmatch m;
-        const char s[] = "a";
-        assert(std::regex_search(s, m, std::regex{"(a()|)\\2a"}));
-        assert(m.size() == 3);
-        assert(!m.prefix().matched);
-        assert(m.prefix().first == s);
-        assert(m.prefix().second == m[0].first);
-        assert(!m.suffix().matched);
-        assert(m.suffix().first == m[0].second);
-        assert(m.suffix().second == s + std::char_traits<char>::length(s));
-        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));
-        assert(m.position(0) == 0);
-        assert(m.str(0) == s);
+      std::cmatch m;
+      const char s[] = "a";
+      assert(std::regex_search(s, m, std::regex{"(a()|)\\2a"}));
+      assert(m.size() == 3);
+      assert(!m.prefix().matched);
+      assert(m.prefix().first == s);
+      assert(m.prefix().second == m[0].first);
+      assert(!m.suffix().matched);
+      assert(m.suffix().first == m[0].second);
+      assert(m.suffix().second == s + std::char_traits<char>::length(s));
+      assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<char>::length(s));
+      assert(m.position(0) == 0);
+      assert(m.str(0) == s);
     }
 
 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
@@ -1519,19 +1519,19 @@ int main(int, char**)
         assert(m.str(0) == s);
     }
     {
-        std::wcmatch m;
-        const wchar_t s[] = L"a";
-        assert(std::regex_search(s, m, std::wregex{L"(a()|)\\2a"}));
-        assert(m.size() == 3);
-        assert(!m.prefix().matched);
-        assert(m.prefix().first == s);
-        assert(m.prefix().second == m[0].first);
-        assert(!m.suffix().matched);
-        assert(m.suffix().first == m[0].second);
-        assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
-        assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
-        assert(m.position(0) == 0);
-        assert(m.str(0) == s);
+      std::wcmatch m;
+      const wchar_t s[] = L"a";
+      assert(std::regex_search(s, m, std::wregex{L"(a()|)\\2a"}));
+      assert(m.size() == 3);
+      assert(!m.prefix().matched);
+      assert(m.prefix().first == s);
+      assert(m.prefix().second == m[0].first);
+      assert(!m.suffix().matched);
+      assert(m.suffix().first == m[0].second);
+      assert(m.suffix().second == s + std::char_traits<wchar_t>::length(s));
+      assert(m.length(0) >= 0 && static_cast<std::size_t>(m.length(0)) == std::char_traits<wchar_t>::length(s));
+      assert(m.position(0) == 0);
+      assert(m.str(0) == s);
     }
 #endif // TEST_HAS_NO_WIDE_CHARACTERS
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/154442


More information about the libcxx-commits mailing list