xref: /llvm-project/clang/test/Analysis/debug-checkers.cpp (revision 29dff0d4fb46fe8f1e9774fd5e64d3e07937ff35)
1*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpDominators %s > %t 2>&1
2*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=DOM-CHECK
3*29dff0d4SBalazs Benics // DOM-CHECK: Immediate dominance tree (Node#,IDom#)
4*29dff0d4SBalazs Benics 
5*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpPostDominators %s > %t 2>&1
6*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=POSTDOM-CHECK
7*29dff0d4SBalazs Benics // POSTDOM-CHECK: Immediate post dominance tree (Node#,IDom#)
8*29dff0d4SBalazs Benics 
9*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpControlDependencies %s > %t 2>&1
10*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=CTRLDEPS-CHECK
11*29dff0d4SBalazs Benics // CTRLDEPS-CHECK: Control dependencies (Node#,Dependency#)
12*29dff0d4SBalazs Benics 
13*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpLiveVars %s > %t 2>&1
14*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=LIVE-VARS-CHECK
15*29dff0d4SBalazs Benics // LIVE-VARS-CHECK: live variables at block exit
16*29dff0d4SBalazs Benics 
17*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpLiveExprs %s > %t 2>&1
18*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=LIVE-EXPRS-CHECK
19*29dff0d4SBalazs Benics // LIVE-EXPRS-CHECK: live expressions at block exit
20*29dff0d4SBalazs Benics 
21*29dff0d4SBalazs Benics // Skip testing CFGViewer.
22*29dff0d4SBalazs Benics 
23*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpCFG %s > %t 2>&1
24*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=CFG-CHECK
25*29dff0d4SBalazs Benics // CFG-CHECK: ENTRY
26*29dff0d4SBalazs Benics 
27*29dff0d4SBalazs Benics // Skip testing CallGraphViewer.
28*29dff0d4SBalazs Benics 
29*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.DumpCallGraph %s > %t 2>&1
30*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=CALL-GRAPH-CHECK
31*29dff0d4SBalazs Benics // CALL-GRAPH-CHECK: --- Call graph Dump ---
32*29dff0d4SBalazs Benics 
33*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ConfigDumper %s > %t 2>&1
34*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=CONFIG-CHECK
35*29dff0d4SBalazs Benics // CONFIG-CHECK: [config]
36*29dff0d4SBalazs Benics 
37*29dff0d4SBalazs Benics // Skip testing ExplodedGraphViewer.
38*29dff0d4SBalazs Benics 
39*29dff0d4SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ReportStmts %s > %t 2>&1
40*29dff0d4SBalazs Benics // RUN: FileCheck --input-file=%t %s -check-prefix=REPORT-STMTS-CHECK
41*29dff0d4SBalazs Benics // REPORT-STMTS-CHECK: warning: Statement
42*29dff0d4SBalazs Benics 
foo(int * p)43*29dff0d4SBalazs Benics void foo(int *p) {
44*29dff0d4SBalazs Benics   *p = 3;
45*29dff0d4SBalazs Benics }
46*29dff0d4SBalazs Benics 
bar()47*29dff0d4SBalazs Benics int bar() {
48*29dff0d4SBalazs Benics   int x;
49*29dff0d4SBalazs Benics   foo(&x);
50*29dff0d4SBalazs Benics   return x;
51*29dff0d4SBalazs Benics }
52