xref: /llvm-project/clang/test/Analysis/loopexit-cfg-output.cpp (revision 999a25ff7283bd83f105ffb826b85181a30ffa41)
1*999a25ffSPeter Szecsi // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -analyzer-config cfg-loopexit=true %s > %t 2>&1
2*999a25ffSPeter Szecsi // RUN: FileCheck --input-file=%t %s
3*999a25ffSPeter Szecsi 
4*999a25ffSPeter Szecsi // CHECK:       [B6 (ENTRY)]
5*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B5
6*999a25ffSPeter Szecsi 
7*999a25ffSPeter Szecsi // CHECK:       [B1]
8*999a25ffSPeter Szecsi // CHECK-NEXT:   1: ForStmt (LoopExit)
9*999a25ffSPeter Szecsi // CHECK-NEXT:   2: return;
10*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
11*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
12*999a25ffSPeter Szecsi 
13*999a25ffSPeter Szecsi // CHECK:       [B2]
14*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
15*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B2.1]++
16*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
17*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
18*999a25ffSPeter Szecsi 
19*999a25ffSPeter Szecsi // CHECK:       [B3]
20*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
21*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B3.1]++
22*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
23*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
24*999a25ffSPeter Szecsi 
25*999a25ffSPeter Szecsi // CHECK:       [B4]
26*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
27*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B4.1] (ImplicitCastExpr, LValueToRValue, int)
28*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 12
29*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B4.2] < [B4.3]
30*999a25ffSPeter Szecsi // CHECK-NEXT:   T: for (...; [B4.4]; ...)
31*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B5
32*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B3 B1
33*999a25ffSPeter Szecsi 
34*999a25ffSPeter Szecsi // CHECK:       [B5]
35*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 0
36*999a25ffSPeter Szecsi // CHECK-NEXT:   2: int i = 0;
37*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B6
38*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
39*999a25ffSPeter Szecsi 
40*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
41*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_forloop1()42*999a25ffSPeter Szecsi void check_forloop1() {
43*999a25ffSPeter Szecsi   for (int i = 0; i < 12; i++) {
44*999a25ffSPeter Szecsi     i++;
45*999a25ffSPeter Szecsi   }
46*999a25ffSPeter Szecsi   return;
47*999a25ffSPeter Szecsi }
48*999a25ffSPeter Szecsi 
49*999a25ffSPeter Szecsi // CHECK:       [B4 (ENTRY)]
50*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
51*999a25ffSPeter Szecsi 
52*999a25ffSPeter Szecsi // CHECK:       [B1]
53*999a25ffSPeter Szecsi // CHECK-NEXT:   1: ForStmt (LoopExit)
54*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
55*999a25ffSPeter Szecsi 
56*999a25ffSPeter Szecsi // CHECK:       [B2]
57*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
58*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
59*999a25ffSPeter Szecsi 
60*999a25ffSPeter Szecsi // CHECK:       [B3]
61*999a25ffSPeter Szecsi // CHECK-NEXT:   T: for (; ; )
62*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B4
63*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B2 NULL
64*999a25ffSPeter Szecsi 
65*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
66*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_forloop2()67*999a25ffSPeter Szecsi void check_forloop2() {
68*999a25ffSPeter Szecsi   for (;;)
69*999a25ffSPeter Szecsi     ;
70*999a25ffSPeter Szecsi }
71*999a25ffSPeter Szecsi 
72*999a25ffSPeter Szecsi // CHECK:       [B5 (ENTRY)]
73*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
74*999a25ffSPeter Szecsi 
75*999a25ffSPeter Szecsi // CHECK:       [B1]
76*999a25ffSPeter Szecsi // CHECK-NEXT:   1: WhileStmt (LoopExit)
77*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
78*999a25ffSPeter Szecsi 
79*999a25ffSPeter Szecsi // CHECK:       [B2]
80*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
81*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
82*999a25ffSPeter Szecsi 
83*999a25ffSPeter Szecsi // CHECK:       [B3]
84*999a25ffSPeter Szecsi // CHECK-NEXT:   1: int i;
85*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
86*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
87*999a25ffSPeter Szecsi 
88*999a25ffSPeter Szecsi // CHECK:       [B4]
89*999a25ffSPeter Szecsi // CHECK-NEXT:   1: true
90*999a25ffSPeter Szecsi // CHECK-NEXT:   T: while [B4.1]
91*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B5
92*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B3 NULL
93*999a25ffSPeter Szecsi 
94*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
95*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_while1()96*999a25ffSPeter Szecsi void check_while1() {
97*999a25ffSPeter Szecsi   while (true) {
98*999a25ffSPeter Szecsi     int i;
99*999a25ffSPeter Szecsi   }
100*999a25ffSPeter Szecsi }
101*999a25ffSPeter Szecsi 
102*999a25ffSPeter Szecsi // CHECK:       [B5 (ENTRY)]
103*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
104*999a25ffSPeter Szecsi 
105*999a25ffSPeter Szecsi // CHECK:       [B1]
106*999a25ffSPeter Szecsi // CHECK-NEXT:   1: WhileStmt (LoopExit)
107*999a25ffSPeter Szecsi // CHECK-NEXT:   2: 2
108*999a25ffSPeter Szecsi // CHECK-NEXT:   3: int k = 2;
109*999a25ffSPeter Szecsi // CHECK-NEXT:   4: return;
110*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
111*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
112*999a25ffSPeter Szecsi 
113*999a25ffSPeter Szecsi // CHECK:       [B2]
114*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
115*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
116*999a25ffSPeter Szecsi 
117*999a25ffSPeter Szecsi // CHECK:       [B3]
118*999a25ffSPeter Szecsi // CHECK-NEXT:   1: l
119*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B3.1] (ImplicitCastExpr, LValueToRValue, int)
120*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 42
121*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B3.2] < [B3.3]
122*999a25ffSPeter Szecsi // CHECK-NEXT:   T: while [B3.4]
123*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B4
124*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B2 B1
125*999a25ffSPeter Szecsi 
126*999a25ffSPeter Szecsi // CHECK:       [B4]
127*999a25ffSPeter Szecsi // CHECK-NEXT:   1: int l;
128*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B5
129*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
130*999a25ffSPeter Szecsi 
131*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
132*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_while2()133*999a25ffSPeter Szecsi void check_while2() {
134*999a25ffSPeter Szecsi   int l;
135*999a25ffSPeter Szecsi   while (l < 42)
136*999a25ffSPeter Szecsi     ;
137*999a25ffSPeter Szecsi   int k = 2;
138*999a25ffSPeter Szecsi   return;
139*999a25ffSPeter Szecsi }
140*999a25ffSPeter Szecsi 
141*999a25ffSPeter Szecsi // CHECK:       [B4 (ENTRY)]
142*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
143*999a25ffSPeter Szecsi 
144*999a25ffSPeter Szecsi // CHECK:       [B1]
145*999a25ffSPeter Szecsi // CHECK-NEXT:   1: WhileStmt (LoopExit)
146*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
147*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
148*999a25ffSPeter Szecsi 
149*999a25ffSPeter Szecsi // CHECK:       [B2]
150*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
151*999a25ffSPeter Szecsi 
152*999a25ffSPeter Szecsi // CHECK:       [B3]
153*999a25ffSPeter Szecsi // CHECK-NEXT:   1: false
154*999a25ffSPeter Szecsi // CHECK-NEXT:   T: while [B3.1]
155*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B4
156*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): NULL B1
157*999a25ffSPeter Szecsi 
158*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
159*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_while3()160*999a25ffSPeter Szecsi void check_while3() {
161*999a25ffSPeter Szecsi   while (false) {
162*999a25ffSPeter Szecsi     ;
163*999a25ffSPeter Szecsi   }
164*999a25ffSPeter Szecsi }
165*999a25ffSPeter Szecsi 
166*999a25ffSPeter Szecsi // CHECK:       [B4 (ENTRY)]
167*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
168*999a25ffSPeter Szecsi 
169*999a25ffSPeter Szecsi // CHECK:       [B1]
170*999a25ffSPeter Szecsi // CHECK-NEXT:   1: DoStmt (LoopExit)
171*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B2
172*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
173*999a25ffSPeter Szecsi 
174*999a25ffSPeter Szecsi // CHECK:       [B2]
175*999a25ffSPeter Szecsi // CHECK-NEXT:   1: false
176*999a25ffSPeter Szecsi // CHECK-NEXT:   T: do ... while [B2.1]
177*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B3 B4
178*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): NULL B1
179*999a25ffSPeter Szecsi 
180*999a25ffSPeter Szecsi // CHECK:       [B3]
181*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
182*999a25ffSPeter Szecsi 
183*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
184*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_dowhile1()185*999a25ffSPeter Szecsi void check_dowhile1() {
186*999a25ffSPeter Szecsi   do {
187*999a25ffSPeter Szecsi   } while (false);
188*999a25ffSPeter Szecsi }
189*999a25ffSPeter Szecsi 
190*999a25ffSPeter Szecsi // CHECK:       [B6 (ENTRY)]
191*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B5
192*999a25ffSPeter Szecsi 
193*999a25ffSPeter Szecsi // CHECK:       [B1]
194*999a25ffSPeter Szecsi // CHECK-NEXT:   1: DoStmt (LoopExit)
195*999a25ffSPeter Szecsi // CHECK-NEXT:   2: j
196*999a25ffSPeter Szecsi // CHECK-NEXT:   3: [B1.2]--
197*999a25ffSPeter Szecsi // CHECK-NEXT:   4: return;
198*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B2
199*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
200*999a25ffSPeter Szecsi 
201*999a25ffSPeter Szecsi // CHECK:       [B2]
202*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
203*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B2.1] (ImplicitCastExpr, LValueToRValue, int)
204*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 20
205*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B2.2] < [B2.3]
206*999a25ffSPeter Szecsi // CHECK-NEXT:   T: do ... while [B2.4]
207*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
208*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B4 B1
209*999a25ffSPeter Szecsi 
210*999a25ffSPeter Szecsi // CHECK:       [B3]
211*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
212*999a25ffSPeter Szecsi // CHECK-NEXT:   2: 2
213*999a25ffSPeter Szecsi // CHECK-NEXT:   3: [B3.1] += [B3.2]
214*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B4 B5
215*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
216*999a25ffSPeter Szecsi 
217*999a25ffSPeter Szecsi // CHECK:       [B4]
218*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B2
219*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
220*999a25ffSPeter Szecsi 
221*999a25ffSPeter Szecsi // CHECK:       [B5]
222*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 2
223*999a25ffSPeter Szecsi // CHECK-NEXT:   2: int j = 2;
224*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B6
225*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B3
226*999a25ffSPeter Szecsi 
227*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
228*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_dowhile2()229*999a25ffSPeter Szecsi void check_dowhile2() {
230*999a25ffSPeter Szecsi   int j = 2;
231*999a25ffSPeter Szecsi   do {
232*999a25ffSPeter Szecsi     j += 2;
233*999a25ffSPeter Szecsi   } while (j < 20);
234*999a25ffSPeter Szecsi   j--;
235*999a25ffSPeter Szecsi   return;
236*999a25ffSPeter Szecsi }
237*999a25ffSPeter Szecsi 
238*999a25ffSPeter Szecsi // CHECK:       [B10 (ENTRY)]
239*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B9
240*999a25ffSPeter Szecsi 
241*999a25ffSPeter Szecsi // CHECK:       [B1]
242*999a25ffSPeter Szecsi // CHECK-NEXT:   1: WhileStmt (LoopExit)
243*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B8
244*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
245*999a25ffSPeter Szecsi 
246*999a25ffSPeter Szecsi // CHECK:       [B2]
247*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
248*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B8
249*999a25ffSPeter Szecsi 
250*999a25ffSPeter Szecsi // CHECK:       [B3]
251*999a25ffSPeter Szecsi // CHECK-NEXT:   1: ForStmt (LoopExit)
252*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B6
253*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
254*999a25ffSPeter Szecsi 
255*999a25ffSPeter Szecsi // CHECK:       [B4]
256*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
257*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B4.1]++
258*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B5
259*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B6
260*999a25ffSPeter Szecsi 
261*999a25ffSPeter Szecsi // CHECK:       [B5]
262*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
263*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B5.1]++
264*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B6
265*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
266*999a25ffSPeter Szecsi 
267*999a25ffSPeter Szecsi // CHECK:       [B6]
268*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
269*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B6.1] (ImplicitCastExpr, LValueToRValue, int)
270*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 6
271*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B6.2] < [B6.3]
272*999a25ffSPeter Szecsi // CHECK-NEXT:   T: for (...; [B6.4]; ...)
273*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B4 B7
274*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B5 B3
275*999a25ffSPeter Szecsi 
276*999a25ffSPeter Szecsi // CHECK:       [B7]
277*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 1
278*999a25ffSPeter Szecsi // CHECK-NEXT:   2: int j = 1;
279*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B8
280*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B6
281*999a25ffSPeter Szecsi 
282*999a25ffSPeter Szecsi // CHECK:       [B8]
283*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
284*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B8.1] (ImplicitCastExpr, LValueToRValue, int)
285*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 2
286*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B8.2] < [B8.3]
287*999a25ffSPeter Szecsi // CHECK-NEXT:   T: while [B8.4]
288*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B9
289*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B7 B1
290*999a25ffSPeter Szecsi 
291*999a25ffSPeter Szecsi // CHECK:       [B9]
292*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 40
293*999a25ffSPeter Szecsi // CHECK-NEXT:   2: -[B9.1]
294*999a25ffSPeter Szecsi // CHECK-NEXT:   3: int i = -40;
295*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B10
296*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B8
297*999a25ffSPeter Szecsi 
298*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
299*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
nested_loops1()300*999a25ffSPeter Szecsi void nested_loops1() {
301*999a25ffSPeter Szecsi   int i = -40;
302*999a25ffSPeter Szecsi   while (i < 2) {
303*999a25ffSPeter Szecsi     for (int j = 1; j < 6; j++)
304*999a25ffSPeter Szecsi       i++;
305*999a25ffSPeter Szecsi   }
306*999a25ffSPeter Szecsi }
307*999a25ffSPeter Szecsi 
308*999a25ffSPeter Szecsi // CHECK:       [B9 (ENTRY)]
309*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B8
310*999a25ffSPeter Szecsi 
311*999a25ffSPeter Szecsi // CHECK:       [B1]
312*999a25ffSPeter Szecsi // CHECK-NEXT:   1: ForStmt (LoopExit)
313*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B7
314*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
315*999a25ffSPeter Szecsi 
316*999a25ffSPeter Szecsi // CHECK:       [B2]
317*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
318*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B2.1]++
319*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B3
320*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B7
321*999a25ffSPeter Szecsi 
322*999a25ffSPeter Szecsi // CHECK:       [B3]
323*999a25ffSPeter Szecsi // CHECK-NEXT:   1: DoStmt (LoopExit)
324*999a25ffSPeter Szecsi // CHECK-NEXT:   2: i
325*999a25ffSPeter Szecsi // CHECK-NEXT:   3: [B3.2]--
326*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
327*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B2
328*999a25ffSPeter Szecsi 
329*999a25ffSPeter Szecsi // CHECK:       [B4]
330*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
331*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B4.1] (ImplicitCastExpr, LValueToRValue, int)
332*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 2
333*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B4.2] < [B4.3]
334*999a25ffSPeter Szecsi // CHECK-NEXT:   T: do ... while [B4.4]
335*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B5
336*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B6 B3
337*999a25ffSPeter Szecsi 
338*999a25ffSPeter Szecsi // CHECK:       [B5]
339*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
340*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B5.1]++
341*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B6 B7
342*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B4
343*999a25ffSPeter Szecsi 
344*999a25ffSPeter Szecsi // CHECK:       [B6]
345*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
346*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B5
347*999a25ffSPeter Szecsi 
348*999a25ffSPeter Szecsi // CHECK:       [B7]
349*999a25ffSPeter Szecsi // CHECK-NEXT:   1: j
350*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B7.1] (ImplicitCastExpr, LValueToRValue, int)
351*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 6
352*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B7.2] < [B7.3]
353*999a25ffSPeter Szecsi // CHECK-NEXT:   T: for (...; [B7.4]; ...)
354*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B8
355*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B5 B1
356*999a25ffSPeter Szecsi 
357*999a25ffSPeter Szecsi // CHECK:       [B8]
358*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 40
359*999a25ffSPeter Szecsi // CHECK-NEXT:   2: -[B8.1]
360*999a25ffSPeter Szecsi // CHECK-NEXT:   3: int i = -40;
361*999a25ffSPeter Szecsi // CHECK-NEXT:   4: 1
362*999a25ffSPeter Szecsi // CHECK-NEXT:   5: int j = 1;
363*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B9
364*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B7
365*999a25ffSPeter Szecsi 
366*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
367*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
nested_loops2()368*999a25ffSPeter Szecsi void nested_loops2() {
369*999a25ffSPeter Szecsi   int i = -40;
370*999a25ffSPeter Szecsi   for (int j = 1; j < 6; j++) {
371*999a25ffSPeter Szecsi     do {
372*999a25ffSPeter Szecsi       i++;
373*999a25ffSPeter Szecsi     } while (i < 2);
374*999a25ffSPeter Szecsi     i--;
375*999a25ffSPeter Szecsi   }
376*999a25ffSPeter Szecsi }
377*999a25ffSPeter Szecsi 
378*999a25ffSPeter Szecsi // CHECK:       [B12 (ENTRY)]
379*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B11
380*999a25ffSPeter Szecsi 
381*999a25ffSPeter Szecsi // CHECK:       [B1]
382*999a25ffSPeter Szecsi // CHECK-NEXT:   1: WhileStmt (LoopExit)
383*999a25ffSPeter Szecsi // CHECK-NEXT:   2: return;
384*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B3 B5
385*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B0
386*999a25ffSPeter Szecsi 
387*999a25ffSPeter Szecsi // CHECK:       [B2]
388*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
389*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B5
390*999a25ffSPeter Szecsi 
391*999a25ffSPeter Szecsi // CHECK:       [B3]
392*999a25ffSPeter Szecsi // CHECK-NEXT:   T: break;
393*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B4
394*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B1
395*999a25ffSPeter Szecsi 
396*999a25ffSPeter Szecsi // CHECK:       [B4]
397*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
398*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B4.1]++
399*999a25ffSPeter Szecsi // CHECK-NEXT:   3: i
400*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B4.3] (ImplicitCastExpr, LValueToRValue, int)
401*999a25ffSPeter Szecsi // CHECK-NEXT:   5: 2
402*999a25ffSPeter Szecsi // CHECK-NEXT:   6: [B4.4] % [B4.5]
403*999a25ffSPeter Szecsi // CHECK-NEXT:   7: [B4.6] (ImplicitCastExpr, IntegralToBoolean, _Bool)
404*999a25ffSPeter Szecsi // CHECK-NEXT:   T: if [B4.7]
405*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B5
406*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B3 B2
407*999a25ffSPeter Szecsi 
408*999a25ffSPeter Szecsi // CHECK:       [B5]
409*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
410*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B5.1] (ImplicitCastExpr, LValueToRValue, int)
411*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 5
412*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B5.2] < [B5.3]
413*999a25ffSPeter Szecsi // CHECK-NEXT:   T: while [B5.4]
414*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B2 B6
415*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B4 B1
416*999a25ffSPeter Szecsi 
417*999a25ffSPeter Szecsi // CHECK:       [B6]
418*999a25ffSPeter Szecsi // CHECK-NEXT:   1: ForStmt (LoopExit)
419*999a25ffSPeter Szecsi // CHECK-NEXT:   2: 1
420*999a25ffSPeter Szecsi // CHECK-NEXT:   3: int i = 1;
421*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B8 B10
422*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B5
423*999a25ffSPeter Szecsi 
424*999a25ffSPeter Szecsi // CHECK:       [B7]
425*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
426*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B7.1]++
427*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B9
428*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B10
429*999a25ffSPeter Szecsi 
430*999a25ffSPeter Szecsi // CHECK:       [B8]
431*999a25ffSPeter Szecsi // CHECK-NEXT:   T: break;
432*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B9
433*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B6
434*999a25ffSPeter Szecsi 
435*999a25ffSPeter Szecsi // CHECK:       [B9]
436*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
437*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B9.1] (ImplicitCastExpr, LValueToRValue, int)
438*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 4
439*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B9.2] == [B9.3]
440*999a25ffSPeter Szecsi // CHECK-NEXT:   T: if [B9.4]
441*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B10
442*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B8 B7
443*999a25ffSPeter Szecsi 
444*999a25ffSPeter Szecsi // CHECK:       [B10]
445*999a25ffSPeter Szecsi // CHECK-NEXT:   1: i
446*999a25ffSPeter Szecsi // CHECK-NEXT:   2: [B10.1] (ImplicitCastExpr, LValueToRValue, int)
447*999a25ffSPeter Szecsi // CHECK-NEXT:   3: 6
448*999a25ffSPeter Szecsi // CHECK-NEXT:   4: [B10.2] < [B10.3]
449*999a25ffSPeter Szecsi // CHECK-NEXT:   T: for (...; [B10.4]; ...)
450*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (2): B7 B11
451*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (2): B9 B6
452*999a25ffSPeter Szecsi 
453*999a25ffSPeter Szecsi // CHECK:       [B11]
454*999a25ffSPeter Szecsi // CHECK-NEXT:   1: 2
455*999a25ffSPeter Szecsi // CHECK-NEXT:   2: int i = 2;
456*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B12
457*999a25ffSPeter Szecsi // CHECK-NEXT:   Succs (1): B10
458*999a25ffSPeter Szecsi 
459*999a25ffSPeter Szecsi // CHECK:       [B0 (EXIT)]
460*999a25ffSPeter Szecsi // CHECK-NEXT:   Preds (1): B1
check_break()461*999a25ffSPeter Szecsi void check_break()
462*999a25ffSPeter Szecsi {
463*999a25ffSPeter Szecsi   for(int i = 2; i < 6; i++) {
464*999a25ffSPeter Szecsi     if(i == 4)
465*999a25ffSPeter Szecsi       break;
466*999a25ffSPeter Szecsi   }
467*999a25ffSPeter Szecsi 
468*999a25ffSPeter Szecsi   int i = 1;
469*999a25ffSPeter Szecsi   while(i<5){
470*999a25ffSPeter Szecsi     i++;
471*999a25ffSPeter Szecsi     if(i%2)
472*999a25ffSPeter Szecsi       break;
473*999a25ffSPeter Szecsi   }
474*999a25ffSPeter Szecsi 
475*999a25ffSPeter Szecsi   return;
476*999a25ffSPeter Szecsi }
477