From: Daniel Jasper Date: Tue, 13 Nov 2012 17:14:11 +0000 (+0000) Subject: Fix AST-matcher descendant visiting for Types, TypeLocs and NestedNamespecifierLocs. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b55c67d5e3b44499fa92ac3a6eea2ce01ea78234;p=clang Fix AST-matcher descendant visiting for Types, TypeLocs and NestedNamespecifierLocs. The RecursiveASTVisitor assumes that any given Traverse-method can be called with a NULL-node. So the subclass needs to handle these appropriately. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167850 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ASTMatchers/ASTMatchFinder.cpp b/lib/ASTMatchers/ASTMatchFinder.cpp index 8ecb26e8c1..6ff125bc83 100644 --- a/lib/ASTMatchers/ASTMatchFinder.cpp +++ b/lib/ASTMatchers/ASTMatchFinder.cpp @@ -183,6 +183,8 @@ public: // We assume that the QualType and the contained type are on the same // hierarchy level. Thus, we try to match either of them. bool TraverseType(QualType TypeNode) { + if (TypeNode.isNull()) + return true; ScopedIncrement ScopedDepth(&CurrentDepth); // Match the Type. if (!match(*TypeNode)) @@ -193,6 +195,8 @@ public: // We assume that the TypeLoc, contained QualType and contained Type all are // on the same hierarchy level. Thus, we try to match all of them. bool TraverseTypeLoc(TypeLoc TypeLocNode) { + if (TypeLocNode.isNull()) + return true; ScopedIncrement ScopedDepth(&CurrentDepth); // Match the Type. if (!match(*TypeLocNode.getType())) @@ -208,10 +212,12 @@ public: return (NNS == NULL) || traverse(*NNS); } bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS) { + if (!NNS) + return true; ScopedIncrement ScopedDepth(&CurrentDepth); if (!match(*NNS.getNestedNameSpecifier())) return false; - return !NNS || traverse(NNS); + return traverse(NNS); } bool shouldVisitTemplateInstantiations() const { return true; }