xref: /aosp_15_r20/external/clang/test/Analysis/debug-CallGraph.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCallGraph %s -fblocks 2>&1 | FileCheck %s
2*67e74705SXin Li 
mmm(int y)3*67e74705SXin Li static void mmm(int y) {
4*67e74705SXin Li   if (y != 0)
5*67e74705SXin Li       y++;
6*67e74705SXin Li   y = y/y;
7*67e74705SXin Li }
8*67e74705SXin Li 
foo(int x,int y)9*67e74705SXin Li static int foo(int x, int y) {
10*67e74705SXin Li     mmm(y);
11*67e74705SXin Li     if (x != 0)
12*67e74705SXin Li       x++;
13*67e74705SXin Li     return 5/x;
14*67e74705SXin Li }
15*67e74705SXin Li 
aaa()16*67e74705SXin Li void aaa() {
17*67e74705SXin Li   foo(1,2);
18*67e74705SXin Li }
19*67e74705SXin Li 
bbb(int y)20*67e74705SXin Li void bbb(int y) {
21*67e74705SXin Li   int x = (y > 2);
22*67e74705SXin Li   ^ {
23*67e74705SXin Li       foo(x, y);
24*67e74705SXin Li   }();
25*67e74705SXin Li }
26*67e74705SXin Li void ccc();
ddd()27*67e74705SXin Li void ddd() { ccc(); }
ccc()28*67e74705SXin Li void ccc() {}
29*67e74705SXin Li 
30*67e74705SXin Li void eee();
eee()31*67e74705SXin Li void eee() {}
fff()32*67e74705SXin Li void fff() { eee(); }
33*67e74705SXin Li 
34*67e74705SXin Li // CHECK:--- Call graph Dump ---
35*67e74705SXin Li // CHECK-NEXT: {{Function: < root > calls: mmm foo aaa < > bbb ccc ddd eee fff $}}
36*67e74705SXin Li // CHECK-NEXT: {{Function: fff calls: eee $}}
37*67e74705SXin Li // CHECK-NEXT: {{Function: eee calls: $}}
38*67e74705SXin Li // CHECK-NEXT: {{Function: ddd calls: ccc $}}
39*67e74705SXin Li // CHECK-NEXT: {{Function: ccc calls: $}}
40*67e74705SXin Li // CHECK-NEXT: {{Function: bbb calls: < > $}}
41*67e74705SXin Li // CHECK-NEXT: {{Function: < > calls: foo $}}
42*67e74705SXin Li // CHECK-NEXT: {{Function: aaa calls: foo $}}
43*67e74705SXin Li // CHECK-NEXT: {{Function: foo calls: mmm $}}
44*67e74705SXin Li // CHECK-NEXT: {{Function: mmm calls: $}}
45