blob: e957c8d70e02bb920073cad7860d811e6e603f44 [file] [log] [blame]
Ted Kremenekb50e7162012-07-14 05:04:10 +00001// RUN: rm -f %t
Dominic Chen184c6242017-03-03 18:02:02 +00002// RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpDominators %s > %t 2>&1
Ted Kremenekb50e7162012-07-14 05:04:10 +00003// RUN: FileCheck --input-file=%t %s
Ted Kremenek0062e742011-10-25 00:25:24 +00004
5// Test the DominatorsTree implementation with various control flows
6int test1()
7{
8 int x = 6;
9 int y = x/2;
10 int z;
11
12 while(y > 0) {
13 if(y < x) {
14 x = x/y;
15 y = y-1;
16 }else{
17 z = x - y;
18 }
19 x = x - 1;
20 x = x - 1;
21 }
22 z = x+y;
23 z = 3;
24 return 0;
25}
26
27// CHECK: Immediate dominance tree (Node#,IDom#):
28// CHECK: (0,1)
Ted Kremenekb50e7162012-07-14 05:04:10 +000029// CHECK: (1,7)
30// CHECK: (2,3)
31// CHECK: (3,6)
32// CHECK: (4,6)
33// CHECK: (5,6)
Ted Kremenek0062e742011-10-25 00:25:24 +000034// CHECK: (6,7)
Ted Kremenekb50e7162012-07-14 05:04:10 +000035// CHECK: (7,8)
Ted Kremenek0062e742011-10-25 00:25:24 +000036// CHECK: (8,9)
37// CHECK: (9,9)
38
39int test2()
40{
41 int x,y,z;
42
43 x = 10; y = 100;
44 if(x > 0){
45 y = 1;
46 }else{
47 while(x<=0){
48 x++;
49 y++;
50 }
51 }
52 z = y;
53
54 return 0;
55}
56
57// CHECK: Immediate dominance tree (Node#,IDom#):
58// CHECK: (0,1)
59// CHECK: (1,6)
Ted Kremenekb50e7162012-07-14 05:04:10 +000060// CHECK: (2,3)
Ted Kremenek0062e742011-10-25 00:25:24 +000061// CHECK: (3,4)
Ted Kremenekb50e7162012-07-14 05:04:10 +000062// CHECK: (4,6)
Ted Kremenek0062e742011-10-25 00:25:24 +000063// CHECK: (5,6)
64// CHECK: (6,7)
65// CHECK: (7,7)
66
67int test3()
68{
69 int x,y,z;
70
71 x = y = z = 1;
72 if(x>0) {
73 while(x>=0){
74 while(y>=x) {
75 x = x-1;
76 y = y/2;
77 }
78 }
79 }
80 z = y;
81
82 return 0;
83}
84
85// CHECK: Immediate dominance tree (Node#,IDom#):
86// CHECK: (0,1)
87// CHECK: (1,7)
Ted Kremenekb50e7162012-07-14 05:04:10 +000088// CHECK: (2,5)
Ted Kremenek0062e742011-10-25 00:25:24 +000089// CHECK: (3,4)
Ted Kremenekb50e7162012-07-14 05:04:10 +000090// CHECK: (4,5)
Ted Kremenek0062e742011-10-25 00:25:24 +000091// CHECK: (5,6)
Ted Kremenekb50e7162012-07-14 05:04:10 +000092// CHECK: (6,7)
Ted Kremenek0062e742011-10-25 00:25:24 +000093// CHECK: (7,8)
94// CHECK: (8,8)
95
96int test4()
97{
98 int y = 3;
99 while(y > 0) {
100 if(y < 3) {
101 while(y>0)
102 y ++;
103 }else{
104 while(y<10)
105 y ++;
106 }
107 }
108 return 0;
109}
110
111// CHECK: Immediate dominance tree (Node#,IDom#):
112// CHECK: (0,1)
Ted Kremenekb50e7162012-07-14 05:04:10 +0000113// CHECK: (1,10)
114// CHECK: (2,9)
115// CHECK: (3,4)
116// CHECK: (4,5)
117// CHECK: (5,9)
118// CHECK: (6,7)
119// CHECK: (7,8)
Ted Kremenek0062e742011-10-25 00:25:24 +0000120// CHECK: (8,9)
Ted Kremenekb50e7162012-07-14 05:04:10 +0000121// CHECK: (9,10)
122// CHECK: (10,11)
Ted Kremenek0062e742011-10-25 00:25:24 +0000123// CHECK: (11,12)
124// CHECK: (12,12)
125
126int test5()
127{
128 int x,y,z,a,b,c;
129 x = 1;
130 y = 2;
131 z = 3;
132 a = 4;
133 b = 5;
134 c = 6;
135 if ( x < 10 ) {
136 if ( y < 10 ) {
137 if ( z < 10 ) {
138 x = 4;
139 } else {
140 x = 5;
141 }
142 a = 10;
143 } else {
144 x = 6;
145 }
146 b = 10;
147 } else {
148 x = 7;
149 }
150 c = 11;
151 return 0;
152}
153
154// CHECK: Immediate dominance tree (Node#,IDom#):
155// CHECK: (0,1)
156// CHECK: (1,10)
157// CHECK: (2,10)
158// CHECK: (3,9)
159// CHECK: (4,9)
160// CHECK: (5,8)
161// CHECK: (6,8)
162// CHECK: (7,8)
163// CHECK: (8,9)
164// CHECK: (9,10)
165// CHECK: (10,11)
166// CHECK: (11,11)
167
Ted Kremenekb50e7162012-07-14 05:04:10 +0000168