Author: dergachev Date: Fri Jan 27 06:14:56 2017 New Revision: 293280 URL: http://llvm.org/viewvc/llvm-project?rev=293280&view=rev Log: [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 Modified: cfe/trunk/lib/Analysis/CallGraph.cpp cfe/trunk/test/Analysis/debug-CallGraph.c Modified: cfe/trunk/lib/Analysis/CallGraph.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CallGraph.cpp?rev=293280&r1=293279&r2=293280&view=diff ============================================================================== --- cfe/trunk/lib/Analysis/CallGraph.cpp (original) +++ cfe/trunk/lib/Analysis/CallGraph.cpp Fri Jan 27 06:14:56 2017 @@ -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. Modified: cfe/trunk/test/Analysis/debug-CallGraph.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/debug-CallGraph.c?rev=293280&r1=293279&r2=293280&view=diff ============================================================================== --- cfe/trunk/test/Analysis/debug-CallGraph.c (original) +++ cfe/trunk/test/Analysis/debug-CallGraph.c Fri Jan 27 06:14:56 2017 @@ -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: $}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits