aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-06-21 20:36:11 +0000
committerAnna Zaks <ganna@apple.com>2012-06-21 20:36:11 +0000
commit24388333364be0ce9d04a07fa9895baeeff78bda (patch)
treecb5e15d849a5b8b9da41b120bc313e244f95c815
parent28a5f0cdfcc927a94c1bda6a225200762df22411 (diff)
[analyzer] Do not step into statements while collecting function decls.
CallGraph's recursive visitor only needs to collect declarations; their bodies will be processed later on. RecursiveASTVisitor will recurse on the bodies if the definition is provided along with declaration. Optimize, by not recursing on any of the statements. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158934 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Analysis/CallGraph.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/include/clang/Analysis/CallGraph.h b/include/clang/Analysis/CallGraph.h
index 81afec0827..509de7bc21 100644
--- a/include/clang/Analysis/CallGraph.h
+++ b/include/clang/Analysis/CallGraph.h
@@ -102,7 +102,8 @@ public:
void dump() const;
void viewGraph() const;
- /// Part of recursive declaration visitation.
+ /// Part of recursive declaration visitation. We recursively visit all the
+ /// Declarations to collect the root functions.
bool VisitFunctionDecl(FunctionDecl *FD) {
// We skip function template definitions, as their semantics is
// only determined when they are instantiated.
@@ -121,6 +122,9 @@ public:
return true;
}
+ // We are only collecting the declarations, so do not step into the bodies.
+ bool TraverseStmt(Stmt *S) { return true; }
+
bool shouldWalkTypesOfTypeLocs() const { return false; }
private: