From 149f309f50cd981ed320c948f772aa571eaa9afa Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Tue, 20 Jun 2023 13:10:45 +0200 Subject: [PATCH] [include-cleaner] Ignore the ParmVarDecl itself in WalkAST.cpp This fixes a false positive where a ParamVarDecl happend to be the same name of some C standard symbol and has a global namespace. ``` using A = int(int time); // we suggest for the `int time`. ``` Differential Revision: https://reviews.llvm.org/D153330 --- clang-tools-extra/include-cleaner/lib/WalkAST.cpp | 4 ++++ clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp index fc392fe..8cfda50 100644 --- a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp +++ b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp @@ -214,6 +214,10 @@ public: return true; } bool VisitVarDecl(VarDecl *VD) { + // Ignore the parameter decl itself (its children were handled elsewhere), + // as they don't contribute to the main-file #include. + if (llvm::isa(VD)) + return true; // Mark declaration from definition as it needs type-checking. if (VD->isThisDeclarationADefinition()) report(VD->getLocation(), VD); diff --git a/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp b/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp index bad55e1..5b5f77b 100644 --- a/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp +++ b/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp @@ -91,7 +91,8 @@ TEST_F(WalkUsedTest, Basic) { #include "header.h" #include "private.h" - void $bar^bar($private^Private $p^p) { + // No reference reported for the Parameter "p". + void $bar^bar($private^Private p) { $foo^foo(); std::$vector^vector $vconstructor^$v^v; $builtin^__builtin_popcount(1); @@ -120,7 +121,6 @@ TEST_F(WalkUsedTest, Basic) { offsetToProviders(AST, SM), UnorderedElementsAre( Pair(Code.point("bar"), UnorderedElementsAre(MainFile)), - Pair(Code.point("p"), UnorderedElementsAre(MainFile)), Pair(Code.point("private"), UnorderedElementsAre(PublicFile, PrivateFile)), Pair(Code.point("foo"), UnorderedElementsAre(HeaderFile)), -- 2.7.4