llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Vitaly Buka (vitalybuka)

<details>
<summary>Changes</summary>

Preparing to moving most of implementation out of the header file.


---
Full diff: https://github.com/llvm/llvm-project/pull/167276.diff


5 Files Affected:

- (modified) clang/lib/Basic/Diagnostic.cpp (+1-1) 
- (modified) clang/lib/Basic/ProfileList.cpp (+1-1) 
- (modified) clang/lib/Basic/SanitizerSpecialCaseList.cpp (+2-2) 
- (modified) llvm/include/llvm/Support/SpecialCaseList.h (+18-5) 
- (modified) llvm/lib/Support/SpecialCaseList.cpp (+8) 


``````````diff
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp
index 2dec26ecacf26..5e9da245e2b43 100644
--- a/clang/lib/Basic/Diagnostic.cpp
+++ b/clang/lib/Basic/Diagnostic.cpp
@@ -534,7 +534,7 @@ WarningsSpecialCaseList::create(const llvm::MemoryBuffer 
&Input,
 void WarningsSpecialCaseList::processSections(DiagnosticsEngine &Diags) {
   static constexpr auto WarningFlavor = clang::diag::Flavor::WarningOrError;
   for (const auto &SectionEntry : sections()) {
-    StringRef DiagGroup = SectionEntry.SectionStr;
+    StringRef DiagGroup = SectionEntry.name();
     if (DiagGroup == "*") {
       // Drop the default section introduced by special case list, we only
       // support exact diagnostic group names.
diff --git a/clang/lib/Basic/ProfileList.cpp b/clang/lib/Basic/ProfileList.cpp
index 9cb118893a0d9..8727057eb78d1 100644
--- a/clang/lib/Basic/ProfileList.cpp
+++ b/clang/lib/Basic/ProfileList.cpp
@@ -36,7 +36,7 @@ class ProfileSpecialCaseList : public llvm::SpecialCaseList {
 
   bool hasPrefix(StringRef Prefix) const {
     for (const auto &It : sections())
-      if (It.Entries.count(Prefix) > 0)
+      if (It.hasPrefix(Prefix))
         return true;
     return false;
   }
diff --git a/clang/lib/Basic/SanitizerSpecialCaseList.cpp 
b/clang/lib/Basic/SanitizerSpecialCaseList.cpp
index 56f551628cf89..928c086898097 100644
--- a/clang/lib/Basic/SanitizerSpecialCaseList.cpp
+++ b/clang/lib/Basic/SanitizerSpecialCaseList.cpp
@@ -42,7 +42,7 @@ void SanitizerSpecialCaseList::createSanitizerSections() {
     SanitizerMask Mask;
 
 #define SANITIZER(NAME, ID)                                                    
\
-  if (S.SectionMatcher.matchAny(NAME))                                         
\
+  if (S.matchName(NAME))                                                       
\
     Mask |= SanitizerKind::ID;
 #define SANITIZER_GROUP(NAME, ID, ALIAS) SANITIZER(NAME, ID)
 
@@ -68,7 +68,7 @@ SanitizerSpecialCaseList::inSectionBlame(SanitizerMask Mask, 
StringRef Prefix,
     if (S.Mask & Mask) {
       unsigned LineNum = S.S.getLastMatch(Prefix, Query, Category);
       if (LineNum > 0)
-        return {S.S.FileIdx, LineNum};
+        return {S.S.fileIndex(), LineNum};
     }
   }
   return NotFound;
diff --git a/llvm/include/llvm/Support/SpecialCaseList.h 
b/llvm/include/llvm/Support/SpecialCaseList.h
index 5ed7adeaf6c92..120d67377c674 100644
--- a/llvm/include/llvm/Support/SpecialCaseList.h
+++ b/llvm/include/llvm/Support/SpecialCaseList.h
@@ -195,17 +195,22 @@ class SpecialCaseList {
   using SectionEntries = StringMap<StringMap<Matcher>>;
 
 protected:
-  struct Section {
+  class Section {
+  public:
     Section(StringRef Str, unsigned FileIdx, bool UseGlobs)
         : SectionMatcher(UseGlobs, /*RemoveDotSlash=*/false), SectionStr(Str),
           FileIdx(FileIdx) {}
 
     Section(Section &&) = default;
 
-    Matcher SectionMatcher;
-    SectionEntries Entries;
-    std::string SectionStr;
-    unsigned FileIdx;
+    // Return name of the section, it's entire string in [].
+    StringRef name() const { return SectionStr; }
+
+    // Returns true of string 'Name' matches section name interpreted as a 
glob.
+    LLVM_ABI bool matchName(StringRef Name) const;
+
+    // Return sequence number of the file where this section is defined.
+    unsigned fileIndex() const { return FileIdx; }
 
     // Helper method to search by Prefix, Query, and Category. Returns
     // 1-based line number on which rule is defined, or 0 if there is no match.
@@ -217,11 +222,19 @@ class SpecialCaseList {
     LLVM_ABI StringRef getLongestMatch(StringRef Prefix, StringRef Query,
                                        StringRef Category) const;
 
+    /// Returns true if the section has any entries for the given prefix.
+    LLVM_ABI bool hasPrefix(StringRef Prefix) const;
+
   private:
     friend class SpecialCaseList;
     LLVM_ABI void preprocess(bool OrderBySize);
     LLVM_ABI const SpecialCaseList::Matcher *
     findMatcher(StringRef Prefix, StringRef Category) const;
+
+    Matcher SectionMatcher;
+    std::string SectionStr;
+    SectionEntries Entries;
+    unsigned FileIdx;
   };
 
   ArrayRef<const Section> sections() const { return Sections; }
diff --git a/llvm/lib/Support/SpecialCaseList.cpp 
b/llvm/lib/Support/SpecialCaseList.cpp
index 8e6e9f34a73f3..395a55d75acd4 100644
--- a/llvm/lib/Support/SpecialCaseList.cpp
+++ b/llvm/lib/Support/SpecialCaseList.cpp
@@ -358,6 +358,10 @@ SpecialCaseList::inSectionBlame(StringRef Section, 
StringRef Prefix,
   return NotFound;
 }
 
+bool SpecialCaseList::Section::matchName(StringRef Name) const {
+  return SectionMatcher.matchAny(Name);
+}
+
 const SpecialCaseList::Matcher *
 SpecialCaseList::Section::findMatcher(StringRef Prefix,
                                       StringRef Category) const {
@@ -394,4 +398,8 @@ StringRef 
SpecialCaseList::Section::getLongestMatch(StringRef Prefix,
   return {};
 }
 
+bool SpecialCaseList::Section::hasPrefix(StringRef Prefix) const {
+  return Entries.find(Prefix) != Entries.end();
+}
+
 } // namespace llvm

``````````

</details>


https://github.com/llvm/llvm-project/pull/167276
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to