[clangd] IncludeCleaner: Don't consider the definition as usage for function forward declarations

Reviewed By: kadircet

Differential Revision: https://reviews.llvm.org/D111711
This commit is contained in:
Kirill Bobyrev 2021-10-26 10:37:05 +02:00
parent 7812f510d2
commit c521288ed3
No known key found for this signature in database
GPG Key ID: 2307C055C8384FA0
2 changed files with 20 additions and 0 deletions

View File

@ -39,6 +39,13 @@ public:
return true;
}
bool VisitFunctionDecl(FunctionDecl *FD) {
// Function definition will require redeclarations to be included.
if (FD == FD->getDefinition())
add(FD);
return true;
}
bool VisitCXXConstructExpr(CXXConstructExpr *CCE) {
add(CCE->getConstructor());
return true;

View File

@ -79,6 +79,19 @@ TEST(IncludeCleaner, ReferencedLocations) {
"struct ^X { ^X(int) {} int ^foo(); };",
"auto x = X(42); auto y = x.foo();",
},
// Function
{
"void ^foo();",
"void foo() {}",
},
{
"void foo() {}",
"void foo();",
},
{
"inline void ^foo() {}",
"void bar() { foo(); }",
},
// Static function
{
"struct ^X { static bool ^foo(); }; bool X::^foo() {}",