From 6c9e299494de2a5b0425e46bc937f29a05128252 Mon Sep 17 00:00:00 2001 From: Artem Dergachev Date: Fri, 27 Jan 2017 12:14:56 +0000 Subject: [PATCH] [analyzer] Consider function call arguments while building CallGraph. Function call can appear in the arguments of another function call, eg.: foo(bar()); This patch adds support for such cases. Patch by Ivan Sidorenko! Differential revision: https://reviews.llvm.org/D28905 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293280 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/CallGraph.cpp | 1 + test/Analysis/debug-CallGraph.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Analysis/CallGraph.cpp b/lib/Analysis/CallGraph.cpp index 8c126b09d0..6d9530bf0c 100644 --- a/lib/Analysis/CallGraph.cpp +++ b/lib/Analysis/CallGraph.cpp @@ -62,6 +62,7 @@ public: void VisitCallExpr(CallExpr *CE) { if (Decl *D = getDeclFromCall(CE)) addCalledDecl(D); + VisitChildren(CE); } // Adds may-call edges for the ObjC message sends. diff --git a/test/Analysis/debug-CallGraph.c b/test/Analysis/debug-CallGraph.c index 64259e2069..686abb06e7 100644 --- a/test/Analysis/debug-CallGraph.c +++ b/test/Analysis/debug-CallGraph.c @@ -1,5 +1,17 @@ // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCallGraph %s -fblocks 2>&1 | FileCheck %s +int get5() { + return 5; +} + +int add(int val1, int val2) { + return val1 + val2; +} + +int test_add() { + return add(10, get5()); +} + static void mmm(int y) { if (y != 0) y++; @@ -32,7 +44,7 @@ void eee() {} void fff() { eee(); } // CHECK:--- Call graph Dump --- -// CHECK-NEXT: {{Function: < root > calls: mmm foo aaa < > bbb ccc ddd eee fff $}} +// CHECK-NEXT: {{Function: < root > calls: get5 add test_add mmm foo aaa < > bbb ccc ddd eee fff $}} // CHECK-NEXT: {{Function: fff calls: eee $}} // CHECK-NEXT: {{Function: eee calls: $}} // CHECK-NEXT: {{Function: ddd calls: ccc $}} @@ -42,3 +54,6 @@ void fff() { eee(); } // CHECK-NEXT: {{Function: aaa calls: foo $}} // CHECK-NEXT: {{Function: foo calls: mmm $}} // CHECK-NEXT: {{Function: mmm calls: $}} +// CHECK-NEXT: {{Function: test_add calls: add get5 $}} +// CHECK-NEXT: {{Function: add calls: $}} +// CHECK-NEXT: {{Function: get5 calls: $}} -- 2.40.0