auto-obj-dtors-cfg-output.cpp revision 47575f1f775f5f250be4f395fa694a7274a65f33
1// 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
47void 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
68void 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
103void 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
124void 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
141// 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):
246// 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):
341// 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):
530// 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):
620// 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):
729