Skip to content

Commit ecb016a

Browse files
authored
[clang] Parse warning-suppression-mapping after setting up diagengine (llvm#125714)
We can emit diagnostics while parsing warning-suppression-mapping, make sure command line flags take affect when emitting those.
1 parent 80fd902 commit ecb016a

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

clang/lib/Basic/Warnings.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,6 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags,
7373
else
7474
Diags.setExtensionHandlingBehavior(diag::Severity::Ignored);
7575

76-
if (!Opts.DiagnosticSuppressionMappingsFile.empty()) {
77-
if (auto FileContents =
78-
VFS.getBufferForFile(Opts.DiagnosticSuppressionMappingsFile)) {
79-
Diags.setDiagSuppressionMapping(**FileContents);
80-
} else if (ReportDiags) {
81-
Diags.Report(diag::err_drv_no_such_file)
82-
<< Opts.DiagnosticSuppressionMappingsFile;
83-
}
84-
}
85-
8676
SmallVector<diag::kind, 10> _Diags;
8777
const IntrusiveRefCntPtr< DiagnosticIDs > DiagIDs =
8878
Diags.getDiagnosticIDs();
@@ -237,4 +227,17 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags,
237227
}
238228
}
239229
}
230+
231+
// Process suppression mappings file after processing other warning flags
232+
// (like -Wno-unknown-warning-option) as we can emit extra warnings during
233+
// processing.
234+
if (!Opts.DiagnosticSuppressionMappingsFile.empty()) {
235+
if (auto FileContents =
236+
VFS.getBufferForFile(Opts.DiagnosticSuppressionMappingsFile)) {
237+
Diags.setDiagSuppressionMapping(**FileContents);
238+
} else if (ReportDiags) {
239+
Diags.Report(diag::err_drv_no_such_file)
240+
<< Opts.DiagnosticSuppressionMappingsFile;
241+
}
242+
}
240243
}

clang/unittests/Basic/DiagnosticTest.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,4 +346,13 @@ TEST_F(SuppressionMappingTest, IsIgnored) {
346346
EXPECT_FALSE(Diags.isIgnored(diag::warn_unused_function,
347347
SM.getLocForStartOfFile(ClangID)));
348348
}
349+
350+
TEST_F(SuppressionMappingTest, ParsingRespectsOtherWarningOpts) {
351+
Diags.getDiagnosticOptions().DiagnosticSuppressionMappingsFile = "foo.txt";
352+
FS->addFile("foo.txt", /*ModificationTime=*/{},
353+
llvm::MemoryBuffer::getMemBuffer("[non-existing-warning]"));
354+
Diags.getDiagnosticOptions().Warnings.push_back("no-unknown-warning-option");
355+
clang::ProcessWarningOptions(Diags, Diags.getDiagnosticOptions(), *FS);
356+
EXPECT_THAT(diags(), IsEmpty());
357+
}
349358
} // namespace

0 commit comments

Comments
 (0)