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 Listatic 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 Listatic 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 Livoid aaa() { 17*67e74705SXin Li foo(1,2); 18*67e74705SXin Li } 19*67e74705SXin Li bbb(int y)20*67e74705SXin Livoid 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 Livoid ddd() { ccc(); } ccc()28*67e74705SXin Livoid ccc() {} 29*67e74705SXin Li 30*67e74705SXin Li void eee(); eee()31*67e74705SXin Livoid eee() {} fff()32*67e74705SXin Livoid 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