[llvm-branch-commits] [clang] e407908 - [clang] Parse warning-suppression-mapping after setting up diagengine (#125714)
Tom Stellard via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Feb 7 16:00:23 PST 2025
Author: kadir çetinkaya
Date: 2025-02-07T15:59:30-08:00
New Revision: e40790864ba00124931f0b242c20a474a9255eb7
URL: https://github.com/llvm/llvm-project/commit/e40790864ba00124931f0b242c20a474a9255eb7
DIFF: https://github.com/llvm/llvm-project/commit/e40790864ba00124931f0b242c20a474a9255eb7.diff
LOG: [clang] Parse warning-suppression-mapping after setting up diagengine (#125714)
We can emit diagnostics while parsing warning-suppression-mapping, make
sure command line flags take affect when emitting those.
(cherry picked from commit ecb016a87d89aed36b8f5d8102e15d8eb0e57108)
Added:
Modified:
clang/lib/Basic/Warnings.cpp
clang/unittests/Basic/DiagnosticTest.cpp
Removed:
################################################################################
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 e03d9a464df7f98..e33840705e44ab4 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 llvm-branch-commits
mailing list