[llvm] [NFC][SpecialCaseList] Add findRule helpers (PR #203025)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 10 09:09:11 PDT 2026


https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/203025

>From 61e473f699d7f65f73338b9bb34753c255d84cb5 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 10 Jun 2026 08:42:00 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
 =?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 llvm/lib/Support/SpecialCaseList.cpp | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/llvm/lib/Support/SpecialCaseList.cpp b/llvm/lib/Support/SpecialCaseList.cpp
index 7495308675c1d..0bf6930abd2c1 100644
--- a/llvm/lib/Support/SpecialCaseList.cpp
+++ b/llvm/lib/Support/SpecialCaseList.cpp
@@ -44,6 +44,7 @@ class RegexMatcher {
 public:
   Error insert(StringRef Pattern, unsigned LineNumber);
   unsigned match(StringRef Query) const;
+  StringRef findRule(unsigned LineNo) const;
 
 private:
   struct Reg {
@@ -61,6 +62,7 @@ class GlobMatcher {
 public:
   Error insert(StringRef Pattern, unsigned LineNumber);
   unsigned match(StringRef Query) const;
+  StringRef findRule(unsigned LineNo) const;
 
 private:
   struct Glob {
@@ -99,6 +101,9 @@ class Matcher {
 
   std::variant<RegexMatcher, GlobMatcher> M;
   bool RemoveDotSlash;
+
+private:
+  StringRef findRule(unsigned LineNo) const;
 };
 
 Error RegexMatcher::insert(StringRef Pattern, unsigned LineNumber) {
@@ -132,6 +137,14 @@ unsigned RegexMatcher::match(StringRef Query) const {
   return 0;
 }
 
+StringRef RegexMatcher::findRule(unsigned LineNo) const {
+  for (const auto &R : RegExes)
+    if (R.LineNo == LineNo)
+      return R.Name;
+  assert(!"`findRule` should be called only with correct `LineNo`");
+  return {};
+}
+
 Error GlobMatcher::insert(StringRef Pattern, unsigned LineNumber) {
   if (Pattern.empty())
     return createStringError(errc::invalid_argument, "Supplied glob was blank");
@@ -218,6 +231,14 @@ unsigned GlobMatcher::match(StringRef Query) const {
   return Best < 0 ? 0 : Globs[Best].LineNo;
 }
 
+StringRef GlobMatcher::findRule(unsigned LineNo) const {
+  for (const auto &G : Globs)
+    if (G.LineNo == LineNo)
+      return G.Name;
+  assert(!"`findRule` should be called only with correct `LineNo`");
+  return {};
+}
+
 Matcher::Matcher(bool UseGlobs, bool RemoveDotSlash)
     : RemoveDotSlash(RemoveDotSlash) {
   if (UseGlobs)
@@ -235,6 +256,11 @@ unsigned Matcher::match(StringRef Query) const {
     Query = llvm::sys::path::remove_leading_dotslash(Query);
   return std::visit([&](auto &V) -> unsigned { return V.match(Query); }, M);
 }
+
+StringRef Matcher::findRule(unsigned LineNo) const {
+  return std::visit([&](auto &V) -> StringRef { return V.findRule(LineNo); },
+                    M);
+}
 } // namespace
 
 class SpecialCaseList::Section::SectionImpl {



More information about the llvm-commits mailing list