summaryrefslogtreecommitdiffstats
path: root/clang/lib/Index/ResolveLocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Index/ResolveLocation.cpp')
-rw-r--r--clang/lib/Index/ResolveLocation.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Index/ResolveLocation.cpp b/clang/lib/Index/ResolveLocation.cpp
index 8edd634f8af..4e992f752b2 100644
--- a/clang/lib/Index/ResolveLocation.cpp
+++ b/clang/lib/Index/ResolveLocation.cpp
@@ -45,6 +45,9 @@ protected:
if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D))
if (ContainsLocation(DD->getDeclaratorInfo()))
return ContainsLoc;
+ if (TypedefDecl *TD = dyn_cast<TypedefDecl>(D))
+ if (ContainsLocation(TD->getTypeDeclaratorInfo()))
+ return ContainsLoc;
return CheckRange(D->getSourceRange());
}
@@ -109,6 +112,7 @@ public:
ASTLocation VisitVarDecl(VarDecl *D);
ASTLocation VisitFunctionDecl(FunctionDecl *D);
ASTLocation VisitObjCMethodDecl(ObjCMethodDecl *D);
+ ASTLocation VisitTypedefDecl(TypedefDecl *D);
ASTLocation VisitDecl(Decl *D);
};
@@ -278,6 +282,16 @@ ASTLocation DeclLocResolver::VisitDeclaratorDecl(DeclaratorDecl *D) {
return ASTLocation(D);
}
+ASTLocation DeclLocResolver::VisitTypedefDecl(TypedefDecl *D) {
+ assert(ContainsLocation(D) &&
+ "Should visit only after verifying that loc is in range");
+
+ if (ContainsLocation(D->getTypeDeclaratorInfo()))
+ return ResolveInDeclarator(D, /*Stmt=*/0, D->getTypeDeclaratorInfo());
+
+ return ASTLocation(D);
+}
+
ASTLocation DeclLocResolver::VisitVarDecl(VarDecl *D) {
assert(ContainsLocation(D) &&
"Should visit only after verifying that loc is in range");
OpenPOWER on IntegriCloud