[clang-tools-extra] 9e8bac7 - [clangd] Respect WantDiags when emitting diags from possibly stale preambles

Kadir Cetinkaya via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 15 03:30:23 PDT 2023


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


        


More information about the cfe-commits mailing list