llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: kadir çetinkaya (kadircet) <details> <summary>Changes</summary> We can emit diagnostics while parsing warning-suppression-mapping, make sure command line flags take affect when emitting those. --- Full diff: https://github.com/llvm/llvm-project/pull/125714.diff 2 Files Affected: - (modified) clang/lib/Basic/Warnings.cpp (+13-10) - (modified) clang/unittests/Basic/DiagnosticTest.cpp (+9) ``````````diff 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 `````````` </details> https://github.com/llvm/llvm-project/pull/125714 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits