Skip to content

Conversation

vitalybuka
Copy link
Collaborator

@vitalybuka vitalybuka commented Oct 6, 2025

Sorting was introduced in #112517.

But it's not needed after #140127. SpecialCaseList stores
sections in a vector now, to preserve declaration order.

And don't remove default section, just skip it.
Probably faster, but unlikely makes a difference.

Created using spr 1.3.6
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels Oct 6, 2025
@vitalybuka vitalybuka requested a review from qinkunbao October 6, 2025 21:43
@llvmbot
Copy link
Member

llvmbot commented Oct 6, 2025

@llvm/pr-subscribers-clang

Author: Vitaly Buka (vitalybuka)

Changes

After #112517 in #140127 sections are stored in
vector, to preserve order.


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

1 Files Affected:

  • (modified) clang/lib/Basic/Diagnostic.cpp (+9-26)
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp
index dc3778bbf339c..0a261cac7fde9 100644
--- a/clang/lib/Basic/Diagnostic.cpp
+++ b/clang/lib/Basic/Diagnostic.cpp
@@ -537,33 +537,16 @@ WarningsSpecialCaseList::create(const llvm::MemoryBuffer &Input,
 }
 
 void WarningsSpecialCaseList::processSections(DiagnosticsEngine &Diags) {
-  // Drop the default section introduced by special case list, we only support
-  // exact diagnostic group names.
-  // FIXME: We should make this configurable in the parser instead.
-  // FIXME: C++20 can use std::erase_if(Sections, [](Section &sec) { return
-  // sec.SectionStr == "*"; });
-  llvm::erase_if(Sections, [](Section &sec) { return sec.SectionStr == "*"; });
-  // Make sure we iterate sections by their line numbers.
-  std::vector<std::pair<unsigned, const Section *>> LineAndSectionEntry;
-  LineAndSectionEntry.reserve(Sections.size());
-  for (const auto &Entry : Sections) {
-    StringRef DiagName = Entry.SectionStr;
-    // Each section has a matcher with that section's name, attached to that
-    // line.
-    const auto &DiagSectionMatcher = Entry.SectionMatcher;
-    unsigned DiagLine = 0;
-    for (const auto &Glob : DiagSectionMatcher->Globs)
-      if (Glob->Name == DiagName) {
-        DiagLine = Glob->LineNo;
-        break;
-      }
-    LineAndSectionEntry.emplace_back(DiagLine, &Entry);
-  }
-  llvm::sort(LineAndSectionEntry);
   static constexpr auto WarningFlavor = clang::diag::Flavor::WarningOrError;
-  for (const auto &[_, SectionEntry] : LineAndSectionEntry) {
+  for (const auto& SectionEntry : Sections) {
+    StringRef DiagGroup = SectionEntry.SectionStr;
+    if (DiagGroup == "*") {
+      // Drop the default section introduced by special case list, we only support
+      // exact diagnostic group names.
+      // FIXME: We should make this configurable in the parser instead.
+      continue;
+    }
     SmallVector<diag::kind> GroupDiags;
-    StringRef DiagGroup = SectionEntry->SectionStr;
     if (Diags.getDiagnosticIDs()->getDiagnosticsInGroup(
             WarningFlavor, DiagGroup, GroupDiags)) {
       StringRef Suggestion =
@@ -576,7 +559,7 @@ void WarningsSpecialCaseList::processSections(DiagnosticsEngine &Diags) {
     for (diag::kind Diag : GroupDiags)
       // We're intentionally overwriting any previous mappings here to make sure
       // latest one takes precedence.
-      DiagToSection[Diag] = SectionEntry;
+      DiagToSection[Diag] = &SectionEntry;
   }
 }
 

@vitalybuka vitalybuka changed the title [NFC][diagnostics] Don't sort sections [NFC][clang] Don't sort sections Oct 6, 2025
@vitalybuka vitalybuka requested review from fmayer and kadircet October 6, 2025 21:45
Copy link

github-actions bot commented Oct 6, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

Created using spr 1.3.6
@fmayer
Copy link
Contributor

fmayer commented Oct 6, 2025

please make commit message a bit more descriptive about which sections

@vitalybuka vitalybuka changed the title [NFC][clang] Don't sort sections [NFC][clang] Don't sort sections of SpecialCaseList Oct 7, 2025
Created using spr 1.3.6
@vitalybuka vitalybuka merged commit b98ac06 into main Oct 7, 2025
9 checks passed
@vitalybuka vitalybuka deleted the users/vitalybuka/spr/nfcdiagnostics-dont-sort-sections branch October 7, 2025 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants