forked from OSchip/llvm-project
Make clang::CallGraph look into template instantiations
Clang's CallGraph analysis doesn't use the RecursiveASTVisitor's setting togo into template instantiations. The result is that anything wanting to do call graph analysis ends up missing any template function calls. Change-Id: Ib4af44ed59f15d43f37af91622a203146a3c3189 llvm-svn: 348942
This commit is contained in:
parent
6753d2d180
commit
f313ed5b7b
|
@ -131,6 +131,7 @@ public:
|
|||
bool TraverseStmt(Stmt *S) { return true; }
|
||||
|
||||
bool shouldWalkTypesOfTypeLocs() const { return false; }
|
||||
bool shouldVisitTemplateInstantiations() const { return true; }
|
||||
|
||||
private:
|
||||
/// Add the given declaration to the call graph.
|
||||
|
|
|
@ -51,8 +51,27 @@ void test_single_call() {
|
|||
do_nothing();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void templ(T t) {
|
||||
ccc();
|
||||
}
|
||||
|
||||
template<>
|
||||
void templ<double>(double t) {
|
||||
eee();
|
||||
}
|
||||
|
||||
|
||||
void templUser() {
|
||||
templ(5);
|
||||
templ(5.5);
|
||||
}
|
||||
|
||||
// CHECK:--- Call graph Dump ---
|
||||
// CHECK-NEXT: {{Function: < root > calls: get5 add test_add mmm foo aaa < > bbb ddd ccc eee fff do_nothing test_single_call $}}
|
||||
// CHECK-NEXT: {{Function: < root > calls: get5 add test_add mmm foo aaa < > bbb ddd ccc eee fff do_nothing test_single_call templ templ templUser $}}
|
||||
// CHECK-NEXT: {{Function: templUser calls: templ templ $}}
|
||||
// CHECK-NEXT: {{Function: templ calls: eee $}}
|
||||
// CHECK-NEXT: {{Function: templ calls: ccc $}}
|
||||
// CHECK-NEXT: {{Function: test_single_call calls: do_nothing $}}
|
||||
// CHECK-NEXT: {{Function: do_nothing calls: $}}
|
||||
// CHECK-NEXT: {{Function: fff calls: eee $}}
|
Loading…
Reference in New Issue