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