Author: Kadir Cetinkaya Date: 2023-03-15T11:29:16+01:00 New Revision: 9e8bac7480640677e04f4b9f98c41cb94f8180e2
URL: https://github.com/llvm/llvm-project/commit/9e8bac7480640677e04f4b9f98c41cb94f8180e2 DIFF: https://github.com/llvm/llvm-project/commit/9e8bac7480640677e04f4b9f98c41cb94f8180e2.diff LOG: [clangd] Respect WantDiags when emitting diags from possibly stale preambles Differential Revision: https://reviews.llvm.org/D146116 Added: Modified: clang-tools-extra/clangd/TUScheduler.cpp clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/TUScheduler.cpp b/clang-tools-extra/clangd/TUScheduler.cpp index a4f6a93b616a..9b366cdd43eb 100644 --- a/clang-tools-extra/clangd/TUScheduler.cpp +++ b/clang-tools-extra/clangd/TUScheduler.cpp @@ -948,7 +948,8 @@ void ASTWorker::update(ParseInputs Inputs, WantDiagnostics WantDiags, // rebuild. Newly built preamble cannot emit diagnostics before this call // finishes (ast callbacks are called from astpeer thread), hence we // gurantee eventual consistency. - if (LatestPreamble && Config::current().Diagnostics.AllowStalePreamble) + if (LatestPreamble && WantDiags != WantDiagnostics::No && + Config::current().Diagnostics.AllowStalePreamble) generateDiagnostics(std::move(Invocation), std::move(Inputs), std::move(CompilerInvocationDiags)); diff --git a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp index ead85a4ce5f2..0538947b7095 100644 --- a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp +++ b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp @@ -1309,6 +1309,13 @@ TEST_F(TUSchedulerTests, PublishWithStalePreamble) { // Make sure that we have eventual consistency. EXPECT_THAT(Collector.diagVersions().back(), Pair(PI.Version, PI.Version)); + + // Check that WantDiagnostics::No doesn't emit any diags. + PI.Version = "4"; + PI.Contents = "#define FOO\n" + PI.Version; + S.update(File, PI, WantDiagnostics::No); + S.blockUntilIdle(timeoutSeconds(5)); + EXPECT_THAT(Collector.diagVersions().back(), Pair("3", "3")); } // If a header file is missing from the CDB (or inferred using heuristics), and _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits