aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/include-cleaner/lib/WalkAST.cpp')
-rw-r--r--clang-tools-extra/include-cleaner/lib/WalkAST.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
index 6c4d9b7..277e6ec5 100644
--- a/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
+++ b/clang-tools-extra/include-cleaner/lib/WalkAST.cpp
@@ -128,6 +128,11 @@ public:
bool VisitDeclRefExpr(DeclRefExpr *DRE) {
auto *FD = DRE->getFoundDecl();
+ // Prefer the underlying decl if FoundDecl isn't a shadow decl, e.g:
+ // - For templates, found-decl is always primary template, but we want the
+ // specializaiton itself.
+ if (!llvm::isa<UsingShadowDecl>(FD))
+ FD = DRE->getDecl();
// For refs to non-meber-like decls, use the found decl.
// For member-like decls, we should have a reference from the qualifier to
// the container decl instead, which is preferred as it'll handle