[clang] [clang] Parse warning-suppression-mapping after setting up diagengine (PR #125714)
kadir çetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 6 01:18:35 PST 2025
https://github.com/kadircet updated https://github.com/llvm/llvm-project/pull/125714
>From b210fc4d5a12eeed12c1746012da41d0c50a79b4 Mon Sep 17 00:00:00 2001
From: Kadir Cetinkaya <kadircet at google.com>
Date: Tue, 4 Feb 2025 17:30:16 +0100
Subject: [PATCH] [clang] Parse warning-suppression-mapping after setting up
diagengine
We can emit diagnostics while parsing warning-suppression-mapping, make
sure command line flags take affect when emitting those.
---
clang/lib/Basic/Warnings.cpp | 23 +++++++++++++----------
clang/unittests/Basic/DiagnosticTest.cpp | 9 +++++++++
2 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/clang/lib/Basic/Warnings.cpp b/clang/lib/Basic/Warnings.cpp
index da0304463007b65..5f48e0ec8155434 100644
--- a/clang/lib/Basic/Warnings.cpp
+++ b/clang/lib/Basic/Warnings.cpp
@@ -73,16 +73,6 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags,
else
Diags.setExtensionHandlingBehavior(diag::Severity::Ignored);
- if (!Opts.DiagnosticSuppressionMappingsFile.empty()) {
- if (auto FileContents =
- VFS.getBufferForFile(Opts.DiagnosticSuppressionMappingsFile)) {
- Diags.setDiagSuppressionMapping(**FileContents);
- } else if (ReportDiags) {
- Diags.Report(diag::err_drv_no_such_file)
- << Opts.DiagnosticSuppressionMappingsFile;
- }
- }
-
SmallVector<diag::kind, 10> _Diags;
const IntrusiveRefCntPtr< DiagnosticIDs > DiagIDs =
Diags.getDiagnosticIDs();
@@ -237,4 +227,17 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags,
}
}
}
+
+ // Process suppression mappings file after processing other warning flags
+ // (like -Wno-unknown-warning-option) as we can emit extra warnings during
+ // processing.
+ if (!Opts.DiagnosticSuppressionMappingsFile.empty()) {
+ if (auto FileContents =
+ VFS.getBufferForFile(Opts.DiagnosticSuppressionMappingsFile)) {
+ Diags.setDiagSuppressionMapping(**FileContents);
+ } else if (ReportDiags) {
+ Diags.Report(diag::err_drv_no_such_file)
+ << Opts.DiagnosticSuppressionMappingsFile;
+ }
+ }
}
diff --git a/clang/unittests/Basic/DiagnosticTest.cpp b/clang/unittests/Basic/DiagnosticTest.cpp
index b26f72a2fb0ee5a..88fa1800f0ff2a4 100644
--- a/clang/unittests/Basic/DiagnosticTest.cpp
+++ b/clang/unittests/Basic/DiagnosticTest.cpp
@@ -346,4 +346,13 @@ TEST_F(SuppressionMappingTest, IsIgnored) {
EXPECT_FALSE(Diags.isIgnored(diag::warn_unused_function,
SM.getLocForStartOfFile(ClangID)));
}
+
+TEST_F(SuppressionMappingTest, ParsingRespectsOtherWarningOpts) {
+ Diags.getDiagnosticOptions().DiagnosticSuppressionMappingsFile = "foo.txt";
+ FS->addFile("foo.txt", /*ModificationTime=*/{},
+ llvm::MemoryBuffer::getMemBuffer("[non-existing-warning]"));
+ Diags.getDiagnosticOptions().Warnings.push_back("no-unknown-warning-option");
+ clang::ProcessWarningOptions(Diags, Diags.getDiagnosticOptions(), *FS);
+ EXPECT_THAT(diags(), IsEmpty());
+}
} // namespace
More information about the cfe-commits
mailing list