[clang-tools-extra] e63d7bd - [clangd] Fix include-cleaner false-positive bug

Sam McCall via cfe-commits cfe-commits at lists.llvm.org
Sat Feb 26 05:12:09 PST 2022


Author: Sam McCall
Date: 2022-02-26T14:11:48+01:00
New Revision: e63d7bdc28e42b537ba29708e7db9f5d1dedefc0

URL: https://github.com/llvm/llvm-project/commit/e63d7bdc28e42b537ba29708e7db9f5d1dedefc0
DIFF: https://github.com/llvm/llvm-project/commit/e63d7bdc28e42b537ba29708e7db9f5d1dedefc0.diff

LOG: [clangd] Fix include-cleaner false-positive bug

For TemplateSpecializationType, we were checking the node's newness
twice, so it always failed the second test.

Fixes https://github.com/clangd/clangd/issues/1036

Added: 
    

Modified: 
    clang-tools-extra/clangd/IncludeCleaner.cpp
    clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/IncludeCleaner.cpp b/clang-tools-extra/clangd/IncludeCleaner.cpp
index cb50804585082..90dfb2b4a3501 100644
--- a/clang-tools-extra/clangd/IncludeCleaner.cpp
+++ b/clang-tools-extra/clangd/IncludeCleaner.cpp
@@ -73,10 +73,8 @@ class ReferencedLocationCrawler
   }
 
   bool VisitTemplateSpecializationType(TemplateSpecializationType *TST) {
-    if (isNew(TST)) {
-      add(TST->getTemplateName().getAsTemplateDecl()); // Primary template.
-      add(TST->getAsCXXRecordDecl());                  // Specialization
-    }
+    add(TST->getTemplateName().getAsTemplateDecl()); // Primary template.
+    add(TST->getAsCXXRecordDecl());                  // Specialization
     return true;
   }
 

diff  --git a/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp b/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp
index 65942fe29c72c..b6bf7695f8873 100644
--- a/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp
+++ b/clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp
@@ -85,6 +85,19 @@ TEST(IncludeCleaner, ReferencedLocations) {
           "typedef bool ^Y; template <typename T> struct ^X {};",
           "X<Y> x;",
       },
+      {
+          // https://github.com/clangd/clangd/issues/1036
+          R"cpp(
+            struct ^Base { void ^base(); };
+            template <int> struct ^Derived : Base {};
+          )cpp",
+          R"cpp(
+            class Holder {
+              void foo() { Member.base(); }
+              Derived<0> Member;
+            };
+          )cpp",
+      },
       {
           "struct Foo; struct ^Foo{}; typedef Foo ^Bar;",
           "Bar b;",
@@ -206,7 +219,8 @@ TEST(IncludeCleaner, ReferencedLocations) {
       {
           "enum class ^Color : char {};",
           "Color *c;",
-      }};
+      },
+  };
   for (const TestCase &T : Cases) {
     TestTU TU;
     TU.Code = T.MainCode;


        


More information about the cfe-commits mailing list