blob: 2024e62ab638fd03ec78ed43a6c6ea2c490948d9 [file] [log] [blame]
Marcin Swiderskifcb72ac2010-10-01 00:23:17 +00001// RUN: %clang_cc1 -analyze -cfg-dump -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s
2// XPASS: *
3
4class A {
5public:
6 A() {}
7 ~A() {}
8 operator int() const { return 1; }
9};
10
11extern const bool UV;
12
13void test_const_ref() {
14 A a;
15 const A& b = a;
16 const A& c = A();
17}
18
19void test_scope() {
20 A a;
21 { A c;
22 A d;
23 }
24 A b;
25}
26
27void test_return() {
28 A a;
29 A b;
30 if (UV) return;
31 A c;
32}
33
34void test_goto() {
35 A a;
36l0:
37 A b;
38 { A a;
39 if (UV) goto l0;
40 if (UV) goto l1;
41 A b;
42 }
43l1:
44 A c;
45}
46
Marcin Swiderski04e046c2010-10-01 00:52:17 +000047void test_if_implicit_scope() {
48 A a;
49 if (A b = a)
50 A c;
51 else A c;
52}
53
54void test_if_jumps() {
55 A a;
56 if (A b = a) {
57 A c;
58 if (UV) return;
59 A d;
60 } else {
61 A c;
62 if (UV) return;
63 A d;
64 }
65 A e;
66}
67
Marcin Swiderski05adedc2010-10-01 01:14:17 +000068void test_while_implicit_scope() {
69 A a;
70 while (A b = a)
71 A c;
72}
73
74void test_while_jumps() {
75 A a;
76 while (A b = a) {
77 A c;
78 if (UV) break;
79 if (UV) continue;
80 if (UV) return;
81 A d;
82 }
83 A e;
84}
85
86void test_do_implicit_scope() {
87 do A a;
88 while (UV);
89}
90
91void test_do_jumps() {
92 A a;
93 do {
94 A b;
95 if (UV) break;
96 if (UV) continue;
97 if (UV) return;
98 A c;
99 } while (UV);
100 A d;
101}
102
Marcin Swiderski8ae60582010-10-01 01:24:41 +0000103void test_switch_implicit_scope() {
104 A a;
105 switch (A b = a)
106 A c;
107}
108
109void test_switch_jumps() {
110 A a;
111 switch (A b = a) {
112 case 0: {
113 A c;
114 if (UV) break;
115 if (UV) return;
116 A f;
117 }
118 case 1:
119 break;
120 }
121 A g;
122}
123
Marcin Swiderski47575f12010-10-01 01:38:14 +0000124void test_for_implicit_scope() {
125 for (A a; A b = a; )
126 A c;
127}
128
129void test_for_jumps() {
130 A a;
131 for (A b; A c = b; ) {
132 A d;
133 if (UV) break;
134 if (UV) continue;
135 if (UV) return;
136 A e;
137 }
138 A f;
139}
140
Marcin Swiderskifcb72ac2010-10-01 00:23:17 +0000141// CHECK: [ B2 (ENTRY) ]
142// CHECK: Predecessors (0):
143// CHECK: Successors (1): B1
144// CHECK: [ B1 ]
145// CHECK: 1: A a;
146// CHECK: 2: const A &b = a;
147// CHECK: 3: const A &c = A();
148// CHECK: 4: [B1.3].~A() (Implicit destructor)
149// CHECK: 5: [B1.1].~A() (Implicit destructor)
150// CHECK: Predecessors (1): B2
151// CHECK: Successors (1): B0
152// CHECK: [ B0 (EXIT) ]
153// CHECK: Predecessors (1): B1
154// CHECK: Successors (0):
155// CHECK: [ B2 (ENTRY) ]
156// CHECK: Predecessors (0):
157// CHECK: Successors (1): B1
158// CHECK: [ B1 ]
159// CHECK: 1: A a;
160// CHECK: 2: A c;
161// CHECK: 3: A d;
162// CHECK: 4: [B1.3].~A() (Implicit destructor)
163// CHECK: 5: [B1.2].~A() (Implicit destructor)
164// CHECK: 6: A b;
165// CHECK: 7: [B1.6].~A() (Implicit destructor)
166// CHECK: 8: [B1.1].~A() (Implicit destructor)
167// CHECK: Predecessors (1): B2
168// CHECK: Successors (1): B0
169// CHECK: [ B0 (EXIT) ]
170// CHECK: Predecessors (1): B1
171// CHECK: Successors (0):
172// CHECK: [ B4 (ENTRY) ]
173// CHECK: Predecessors (0):
174// CHECK: Successors (1): B3
175// CHECK: [ B1 ]
176// CHECK: 1: A c;
177// CHECK: 2: [B1.1].~A() (Implicit destructor)
178// CHECK: 3: [B3.2].~A() (Implicit destructor)
179// CHECK: 4: [B3.1].~A() (Implicit destructor)
180// CHECK: Predecessors (1): B3
181// CHECK: Successors (1): B0
182// CHECK: [ B2 ]
183// CHECK: 1: return;
184// CHECK: 2: [B3.2].~A() (Implicit destructor)
185// CHECK: 3: [B3.1].~A() (Implicit destructor)
186// CHECK: Predecessors (1): B3
187// CHECK: Successors (1): B0
188// CHECK: [ B3 ]
189// CHECK: 1: A a;
190// CHECK: 2: A b;
191// CHECK: 3: UV
192// CHECK: T: if [B3.3]
193// CHECK: Predecessors (1): B4
194// CHECK: Successors (2): B2 B1
195// CHECK: [ B0 (EXIT) ]
196// CHECK: Predecessors (2): B1 B2
197// CHECK: Successors (0):
198// CHECK: [ B8 (ENTRY) ]
199// CHECK: Predecessors (0):
200// CHECK: Successors (1): B7
201// CHECK: [ B1 ]
202// CHECK: l1:
203// CHECK: 1: A c;
204// CHECK: 2: [B1.1].~A() (Implicit destructor)
205// CHECK: 3: [B6.1].~A() (Implicit destructor)
206// CHECK: 4: [B7.1].~A() (Implicit destructor)
207// CHECK: Predecessors (2): B2 B3
208// CHECK: Successors (1): B0
209// CHECK: [ B2 ]
210// CHECK: 1: A b;
211// CHECK: 2: [B2.1].~A() (Implicit destructor)
212// CHECK: 3: [B6.2].~A() (Implicit destructor)
213// CHECK: Predecessors (1): B4
214// CHECK: Successors (1): B1
215// CHECK: [ B3 ]
216// CHECK: 1: [B6.2].~A() (Implicit destructor)
217// CHECK: T: goto l1;
218// CHECK: Predecessors (1): B4
219// CHECK: Successors (1): B1
220// CHECK: [ B4 ]
221// CHECK: 1: UV
222// CHECK: T: if [B4.1]
223// CHECK: Predecessors (1): B6
224// CHECK: Successors (2): B3 B2
225// CHECK: [ B5 ]
226// CHECK: 1: [B6.2].~A() (Implicit destructor)
227// CHECK: 2: [B6.1].~A() (Implicit destructor)
228// CHECK: T: goto l0;
229// CHECK: Predecessors (1): B6
230// CHECK: Successors (1): B6
231// CHECK: [ B6 ]
232// CHECK: l0:
233// CHECK: 1: A b;
234// CHECK: 2: A a;
235// CHECK: 3: UV
236// CHECK: T: if [B6.3]
237// CHECK: Predecessors (2): B7 B5
238// CHECK: Successors (2): B5 B4
239// CHECK: [ B7 ]
240// CHECK: 1: A a;
241// CHECK: Predecessors (1): B8
242// CHECK: Successors (1): B6
243// CHECK: [ B0 (EXIT) ]
244// CHECK: Predecessors (1): B1
245// CHECK: Successors (0):
Marcin Swiderski04e046c2010-10-01 00:52:17 +0000246// CHECK: [ B5 (ENTRY) ]
247// CHECK: Predecessors (0):
248// CHECK: Successors (1): B4
249// CHECK: [ B1 ]
250// CHECK: 1: [B4.3].~A() (Implicit destructor)
251// CHECK: 2: [B4.1].~A() (Implicit destructor)
252// CHECK: Predecessors (2): B2 B3
253// CHECK: Successors (1): B0
254// CHECK: [ B2 ]
255// CHECK: 1: A c;
256// CHECK: 2: [B2.1].~A() (Implicit destructor)
257// CHECK: Predecessors (1): B4
258// CHECK: Successors (1): B1
259// CHECK: [ B3 ]
260// CHECK: 1: A c;
261// CHECK: 2: [B3.1].~A() (Implicit destructor)
262// CHECK: Predecessors (1): B4
263// CHECK: Successors (1): B1
264// CHECK: [ B4 ]
265// CHECK: 1: A a;
266// CHECK: 2: a
267// CHECK: 3: if ([B4.5])
268// CHECK: [B3.1]else
269// CHECK: [B2.1] 4: b.operator int()
270// CHECK: 5: [B4.4]
271// CHECK: T: if [B4.5]
272// CHECK: Predecessors (1): B5
273// CHECK: Successors (2): B3 B2
274// CHECK: [ B0 (EXIT) ]
275// CHECK: Predecessors (1): B1
276// CHECK: Successors (0):
277// CHECK: [ B9 (ENTRY) ]
278// CHECK: Predecessors (0):
279// CHECK: Successors (1): B8
280// CHECK: [ B1 ]
281// CHECK: 1: [B8.3].~A() (Implicit destructor)
282// CHECK: 2: A e;
283// CHECK: 3: [B1.2].~A() (Implicit destructor)
284// CHECK: 4: [B8.1].~A() (Implicit destructor)
285// CHECK: Predecessors (2): B2 B5
286// CHECK: Successors (1): B0
287// CHECK: [ B2 ]
288// CHECK: 1: A d;
289// CHECK: 2: [B2.1].~A() (Implicit destructor)
290// CHECK: 3: [B4.1].~A() (Implicit destructor)
291// CHECK: Predecessors (1): B4
292// CHECK: Successors (1): B1
293// CHECK: [ B3 ]
294// CHECK: 1: return;
295// CHECK: 2: [B4.1].~A() (Implicit destructor)
296// CHECK: 3: [B8.3].~A() (Implicit destructor)
297// CHECK: 4: [B8.1].~A() (Implicit destructor)
298// CHECK: Predecessors (1): B4
299// CHECK: Successors (1): B0
300// CHECK: [ B4 ]
301// CHECK: 1: A c;
302// CHECK: 2: UV
303// CHECK: T: if [B4.2]
304// CHECK: Predecessors (1): B8
305// CHECK: Successors (2): B3 B2
306// CHECK: [ B5 ]
307// CHECK: 1: A d;
308// CHECK: 2: [B5.1].~A() (Implicit destructor)
309// CHECK: 3: [B7.1].~A() (Implicit destructor)
310// CHECK: Predecessors (1): B7
311// CHECK: Successors (1): B1
312// CHECK: [ B6 ]
313// CHECK: 1: return;
314// CHECK: 2: [B7.1].~A() (Implicit destructor)
315// CHECK: 3: [B8.3].~A() (Implicit destructor)
316// CHECK: 4: [B8.1].~A() (Implicit destructor)
317// CHECK: Predecessors (1): B7
318// CHECK: Successors (1): B0
319// CHECK: [ B7 ]
320// CHECK: 1: A c;
321// CHECK: 2: UV
322// CHECK: T: if [B7.2]
323// CHECK: Predecessors (1): B8
324// CHECK: Successors (2): B6 B5
325// CHECK: [ B8 ]
326// CHECK: 1: A a;
327// CHECK: 2: a
328// CHECK: 3: if ([B8.5]) {
329// CHECK: [B7.1] if ([B7.2])
330// CHECK: [B6.1][B5.1]} else {
331// CHECK: [B4.1] if ([B4.2])
332// CHECK: [B3.1][B2.1]}
333// CHECK: 4: b.operator int()
334// CHECK: 5: [B8.4]
335// CHECK: T: if [B8.5]
336// CHECK: Predecessors (1): B9
337// CHECK: Successors (2): B7 B4
338// CHECK: [ B0 (EXIT) ]
339// CHECK: Predecessors (3): B1 B3 B6
340// CHECK: Successors (0):
Marcin Swiderski05adedc2010-10-01 01:14:17 +0000341// CHECK: [ B6 (ENTRY) ]
342// CHECK: Predecessors (0):
343// CHECK: Successors (1): B5
344// CHECK: [ B1 ]
345// CHECK: 1: [B2.2].~A() (Implicit destructor)
346// CHECK: 2: [B5.1].~A() (Implicit destructor)
347// CHECK: Predecessors (1): B2
348// CHECK: Successors (1): B0
349// CHECK: [ B2 ]
350// CHECK: 1: a
351// CHECK: 2: while ([B2.4])
352// CHECK: [B4.1] 3: b.operator int()
353// CHECK: 4: [B2.3]
354// CHECK: T: while [B2.4]
355// CHECK: Predecessors (2): B3 B5
356// CHECK: Successors (2): B4 B1
357// CHECK: [ B3 ]
358// CHECK: Predecessors (1): B4
359// CHECK: Successors (1): B2
360// CHECK: [ B4 ]
361// CHECK: 1: A c;
362// CHECK: 2: [B4.1].~A() (Implicit destructor)
363// CHECK: 3: [B2.2].~A() (Implicit destructor)
364// CHECK: Predecessors (1): B2
365// CHECK: Successors (1): B3
366// CHECK: [ B5 ]
367// CHECK: 1: A a;
368// CHECK: Predecessors (1): B6
369// CHECK: Successors (1): B2
370// CHECK: [ B0 (EXIT) ]
371// CHECK: Predecessors (1): B1
372// CHECK: Successors (0):
373// CHECK: [ B12 (ENTRY) ]
374// CHECK: Predecessors (0):
375// CHECK: Successors (1): B11
376// CHECK: [ B1 ]
377// CHECK: 1: [B2.2].~A() (Implicit destructor)
378// CHECK: 2: A e;
379// CHECK: 3: [B1.2].~A() (Implicit destructor)
380// CHECK: 4: [B11.1].~A() (Implicit destructor)
381// CHECK: Predecessors (2): B9 B2
382// CHECK: Successors (1): B0
383// CHECK: [ B2 ]
384// CHECK: 1: a
385// CHECK: 2: while ([B2.4])
386// CHECK: {
387// CHECK: [B10.1] if ([B10.2])
388// CHECK: break;
389// CHECK: if ([B8.1])
390// CHECK: continue;
391// CHECK: if ([B6.1])
392// CHECK: [B5.1][B4.1] }
393// CHECK: 3: b.operator int()
394// CHECK: 4: [B2.3]
395// CHECK: T: while [B2.4]
396// CHECK: Predecessors (2): B3 B11
397// CHECK: Successors (2): B10 B1
398// CHECK: [ B3 ]
399// CHECK: Predecessors (2): B4 B7
400// CHECK: Successors (1): B2
401// CHECK: [ B4 ]
402// CHECK: 1: A d;
403// CHECK: 2: [B4.1].~A() (Implicit destructor)
404// CHECK: 3: [B10.1].~A() (Implicit destructor)
405// CHECK: 4: [B2.2].~A() (Implicit destructor)
406// CHECK: Predecessors (1): B6
407// CHECK: Successors (1): B3
408// CHECK: [ B5 ]
409// CHECK: 1: return;
410// CHECK: 2: [B10.1].~A() (Implicit destructor)
411// CHECK: 3: [B2.2].~A() (Implicit destructor)
412// CHECK: 4: [B11.1].~A() (Implicit destructor)
413// CHECK: Predecessors (1): B6
414// CHECK: Successors (1): B0
415// CHECK: [ B6 ]
416// CHECK: 1: UV
417// CHECK: T: if [B6.1]
418// CHECK: Predecessors (1): B8
419// CHECK: Successors (2): B5 B4
420// CHECK: [ B7 ]
421// CHECK: 1: [B10.1].~A() (Implicit destructor)
422// CHECK: 2: [B2.2].~A() (Implicit destructor)
423// CHECK: T: continue;
424// CHECK: Predecessors (1): B8
425// CHECK: Successors (1): B3
426// CHECK: [ B8 ]
427// CHECK: 1: UV
428// CHECK: T: if [B8.1]
429// CHECK: Predecessors (1): B10
430// CHECK: Successors (2): B7 B6
431// CHECK: [ B9 ]
432// CHECK: 1: [B10.1].~A() (Implicit destructor)
433// CHECK: T: break;
434// CHECK: Predecessors (1): B10
435// CHECK: Successors (1): B1
436// CHECK: [ B10 ]
437// CHECK: 1: A c;
438// CHECK: 2: UV
439// CHECK: T: if [B10.2]
440// CHECK: Predecessors (1): B2
441// CHECK: Successors (2): B9 B8
442// CHECK: [ B11 ]
443// CHECK: 1: A a;
444// CHECK: Predecessors (1): B12
445// CHECK: Successors (1): B2
446// CHECK: [ B0 (EXIT) ]
447// CHECK: Predecessors (2): B1 B5
448// CHECK: Successors (0):
449// CHECK: [ B4 (ENTRY) ]
450// CHECK: Predecessors (0):
451// CHECK: Successors (1): B2
452// CHECK: [ B1 ]
453// CHECK: 1: UV
454// CHECK: T: do ... while [B1.1]
455// CHECK: Predecessors (1): B2
456// CHECK: Successors (2): B3 B0
457// CHECK: [ B2 ]
458// CHECK: 1: A a;
459// CHECK: 2: [B2.1].~A() (Implicit destructor)
460// CHECK: Predecessors (2): B3 B4
461// CHECK: Successors (1): B1
462// CHECK: [ B3 ]
463// CHECK: Predecessors (1): B1
464// CHECK: Successors (1): B2
465// CHECK: [ B0 (EXIT) ]
466// CHECK: Predecessors (1): B1
467// CHECK: Successors (0):
468// CHECK: [ B12 (ENTRY) ]
469// CHECK: Predecessors (0):
470// CHECK: Successors (1): B11
471// CHECK: [ B1 ]
472// CHECK: 1: A d;
473// CHECK: 2: [B1.1].~A() (Implicit destructor)
474// CHECK: 3: [B11.1].~A() (Implicit destructor)
475// CHECK: Predecessors (2): B8 B2
476// CHECK: Successors (1): B0
477// CHECK: [ B2 ]
478// CHECK: 1: UV
479// CHECK: T: do ... while [B2.1]
480// CHECK: Predecessors (2): B3 B6
481// CHECK: Successors (2): B10 B1
482// CHECK: [ B3 ]
483// CHECK: 1: A c;
484// CHECK: 2: [B3.1].~A() (Implicit destructor)
485// CHECK: 3: [B9.1].~A() (Implicit destructor)
486// CHECK: Predecessors (1): B5
487// CHECK: Successors (1): B2
488// CHECK: [ B4 ]
489// CHECK: 1: return;
490// CHECK: 2: [B9.1].~A() (Implicit destructor)
491// CHECK: 3: [B11.1].~A() (Implicit destructor)
492// CHECK: Predecessors (1): B5
493// CHECK: Successors (1): B0
494// CHECK: [ B5 ]
495// CHECK: 1: UV
496// CHECK: T: if [B5.1]
497// CHECK: Predecessors (1): B7
498// CHECK: Successors (2): B4 B3
499// CHECK: [ B6 ]
500// CHECK: 1: [B9.1].~A() (Implicit destructor)
501// CHECK: T: continue;
502// CHECK: Predecessors (1): B7
503// CHECK: Successors (1): B2
504// CHECK: [ B7 ]
505// CHECK: 1: UV
506// CHECK: T: if [B7.1]
507// CHECK: Predecessors (1): B9
508// CHECK: Successors (2): B6 B5
509// CHECK: [ B8 ]
510// CHECK: 1: [B9.1].~A() (Implicit destructor)
511// CHECK: T: break;
512// CHECK: Predecessors (1): B9
513// CHECK: Successors (1): B1
514// CHECK: [ B9 ]
515// CHECK: 1: A b;
516// CHECK: 2: UV
517// CHECK: T: if [B9.2]
518// CHECK: Predecessors (2): B10 B11
519// CHECK: Successors (2): B8 B7
520// CHECK: [ B10 ]
521// CHECK: Predecessors (1): B2
522// CHECK: Successors (1): B9
523// CHECK: [ B11 ]
524// CHECK: 1: A a;
525// CHECK: Predecessors (1): B12
526// CHECK: Successors (1): B9
527// CHECK: [ B0 (EXIT) ]
528// CHECK: Predecessors (2): B1 B4
529// CHECK: Successors (0):
Marcin Swiderski8ae60582010-10-01 01:24:41 +0000530// CHECK: [ B4 (ENTRY) ]
531// CHECK: Predecessors (0):
532// CHECK: Successors (1): B2
533// CHECK: [ B1 ]
534// CHECK: 1: [B2.3].~A() (Implicit destructor)
535// CHECK: 2: [B2.1].~A() (Implicit destructor)
536// CHECK: Predecessors (2): B3 B2
537// CHECK: Successors (1): B0
538// CHECK: [ B2 ]
539// CHECK: 1: A a;
540// CHECK: 2: a
541// CHECK: 3: switch ([B2.4])
542// CHECK: [B3.1] 4: b.operator int()
543// CHECK: T: switch [B2.4]
544// CHECK: Predecessors (1): B4
545// CHECK: Successors (1): B1
546// CHECK: [ B3 ]
547// CHECK: 1: A c;
548// CHECK: 2: [B3.1].~A() (Implicit destructor)
549// CHECK: Predecessors (0):
550// CHECK: Successors (1): B1
551// CHECK: [ B0 (EXIT) ]
552// CHECK: Predecessors (1): B1
553// CHECK: Successors (0):
554// CHECK: [ B9 (ENTRY) ]
555// CHECK: Predecessors (0):
556// CHECK: Successors (1): B2
557// CHECK: [ B1 ]
558// CHECK: 1: [B2.3].~A() (Implicit destructor)
559// CHECK: 2: A g;
560// CHECK: 3: [B1.2].~A() (Implicit destructor)
561// CHECK: 4: [B2.1].~A() (Implicit destructor)
562// CHECK: Predecessors (3): B3 B7 B2
563// CHECK: Successors (1): B0
564// CHECK: [ B2 ]
565// CHECK: 1: A a;
566// CHECK: 2: a
567// CHECK: 3: switch ([B2.4]) {
568// CHECK: case 0:
569// CHECK: {
570// CHECK: [B8.1] if ([B8.2])
571// CHECK: break;
572// CHECK: if ([B6.1])
573// CHECK: [B5.1][B4.1] }
574// CHECK: case 1:
575// CHECK: break;
576// CHECK: }
577// CHECK: 4: b.operator int()
578// CHECK: T: switch [B2.4]
579// CHECK: Predecessors (1): B9
580// CHECK: Successors (3): B3 B8
581// CHECK: B1
582// CHECK: [ B3 ]
583// CHECK: case 1:
584// CHECK: T: break;
585// CHECK: Predecessors (2): B2 B4
586// CHECK: Successors (1): B1
587// CHECK: [ B4 ]
588// CHECK: 1: A f;
589// CHECK: 2: [B4.1].~A() (Implicit destructor)
590// CHECK: 3: [B8.1].~A() (Implicit destructor)
591// CHECK: Predecessors (1): B6
592// CHECK: Successors (1): B3
593// CHECK: [ B5 ]
594// CHECK: 1: return;
595// CHECK: 2: [B8.1].~A() (Implicit destructor)
596// CHECK: 3: [B2.3].~A() (Implicit destructor)
597// CHECK: 4: [B2.1].~A() (Implicit destructor)
598// CHECK: Predecessors (1): B6
599// CHECK: Successors (1): B0
600// CHECK: [ B6 ]
601// CHECK: 1: UV
602// CHECK: T: if [B6.1]
603// CHECK: Predecessors (1): B8
604// CHECK: Successors (2): B5 B4
605// CHECK: [ B7 ]
606// CHECK: 1: [B8.1].~A() (Implicit destructor)
607// CHECK: T: break;
608// CHECK: Predecessors (1): B8
609// CHECK: Successors (1): B1
610// CHECK: [ B8 ]
611// CHECK: case 0:
612// CHECK: 1: A c;
613// CHECK: 2: UV
614// CHECK: T: if [B8.2]
615// CHECK: Predecessors (1): B2
616// CHECK: Successors (2): B7 B6
617// CHECK: [ B0 (EXIT) ]
618// CHECK: Predecessors (2): B1 B5
619// CHECK: Successors (0):
Marcin Swiderski47575f12010-10-01 01:38:14 +0000620// CHECK: [ B6 (ENTRY) ]
621// CHECK: Predecessors (0):
622// CHECK: Successors (1): B5
623// CHECK: [ B1 ]
624// CHECK: 1: [B2.2].~A() (Implicit destructor)
625// CHECK: 2: [B5.1].~A() (Implicit destructor)
626// CHECK: Predecessors (1): B2
627// CHECK: Successors (1): B0
628// CHECK: [ B2 ]
629// CHECK: 1: a
630// CHECK: 2: for (A a; [B2.4];)
631// CHECK: [B4.1] 3: b.operator int()
632// CHECK: 4: [B2.3]
633// CHECK: T: for (...; [B2.4]; )
634// CHECK: Predecessors (2): B3 B5
635// CHECK: Successors (2): B4 B1
636// CHECK: [ B3 ]
637// CHECK: 1: [B2.2].~A() (Implicit destructor)
638// CHECK: Predecessors (1): B4
639// CHECK: Successors (1): B2
640// CHECK: [ B4 ]
641// CHECK: 1: A c;
642// CHECK: 2: [B4.1].~A() (Implicit destructor)
643// CHECK: Predecessors (1): B2
644// CHECK: Successors (1): B3
645// CHECK: [ B5 ]
646// CHECK: 1: A a;
647// CHECK: Predecessors (1): B6
648// CHECK: Successors (1): B2
649// CHECK: [ B0 (EXIT) ]
650// CHECK: Predecessors (1): B1
651// CHECK: Successors (0):
652// CHECK: [ B12 (ENTRY) ]
653// CHECK: Predecessors (0):
654// CHECK: Successors (1): B11
655// CHECK: [ B1 ]
656// CHECK: 1: [B2.2].~A() (Implicit destructor)
657// CHECK: 2: [B11.2].~A() (Implicit destructor)
658// CHECK: 3: A f;
659// CHECK: 4: [B1.3].~A() (Implicit destructor)
660// CHECK: 5: [B11.1].~A() (Implicit destructor)
661// CHECK: Predecessors (2): B9 B2
662// CHECK: Successors (1): B0
663// CHECK: [ B2 ]
664// CHECK: 1: b
665// CHECK: 2: for (A b; [B2.4];) {
666// CHECK: [B10.1] if ([B10.2])
667// CHECK: break;
668// CHECK: if ([B8.1])
669// CHECK: continue;
670// CHECK: if ([B6.1])
671// CHECK: [B5.1][B4.1]}
672// CHECK: 3: c.operator int()
673// CHECK: 4: [B2.3]
674// CHECK: T: for (...; [B2.4]; )
675// CHECK: Predecessors (2): B3 B11
676// CHECK: Successors (2): B10 B1
677// CHECK: [ B3 ]
678// CHECK: 1: [B2.2].~A() (Implicit destructor)
679// CHECK: Predecessors (2): B4 B7
680// CHECK: Successors (1): B2
681// CHECK: [ B4 ]
682// CHECK: 1: A e;
683// CHECK: 2: [B4.1].~A() (Implicit destructor)
684// CHECK: 3: [B10.1].~A() (Implicit destructor)
685// CHECK: Predecessors (1): B6
686// CHECK: Successors (1): B3
687// CHECK: [ B5 ]
688// CHECK: 1: return;
689// CHECK: 2: [B10.1].~A() (Implicit destructor)
690// CHECK: 3: [B2.2].~A() (Implicit destructor)
691// CHECK: 4: [B11.2].~A() (Implicit destructor)
692// CHECK: 5: [B11.1].~A() (Implicit destructor)
693// CHECK: Predecessors (1): B6
694// CHECK: Successors (1): B0
695// CHECK: [ B6 ]
696// CHECK: 1: UV
697// CHECK: T: if [B6.1]
698// CHECK: Predecessors (1): B8
699// CHECK: Successors (2): B5 B4
700// CHECK: [ B7 ]
701// CHECK: 1: [B10.1].~A() (Implicit destructor)
702// CHECK: T: continue;
703// CHECK: Predecessors (1): B8
704// CHECK: Successors (1): B3
705// CHECK: [ B8 ]
706// CHECK: 1: UV
707// CHECK: T: if [B8.1]
708// CHECK: Predecessors (1): B10
709// CHECK: Successors (2): B7 B6
710// CHECK: [ B9 ]
711// CHECK: 1: [B10.1].~A() (Implicit destructor)
712// CHECK: T: break;
713// CHECK: Predecessors (1): B10
714// CHECK: Successors (1): B1
715// CHECK: [ B10 ]
716// CHECK: 1: A d;
717// CHECK: 2: UV
718// CHECK: T: if [B10.2]
719// CHECK: Predecessors (1): B2
720// CHECK: Successors (2): B9 B8
721// CHECK: [ B11 ]
722// CHECK: 1: A a;
723// CHECK: 2: A b;
724// CHECK: Predecessors (1): B12
725// CHECK: Successors (1): B2
726// CHECK: [ B0 (EXIT) ]
727// CHECK: Predecessors (2): B1 B5
728// CHECK: Successors (0):