auto-obj-dtors-cfg-output.cpp revision 960809e7e9f4a6e949797d20bc081da80495c0e1
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: a
165// CHECK:       4: [B1.3]
166// CHECK:       5: const A &b = a;
167// CHECK:       6: A()
168// CHECK:       7: [B1.6] (BindTemporary)
169// CHECK:       8: [B1.7]
170// CHECK:       9: [B1.8]
171// CHECK:      10: const A &c = A();
172// CHECK:      11: [B1.10].~A() (Implicit destructor)
173// CHECK:      12: [B1.2].~A() (Implicit destructor)
174// CHECK:     Predecessors (1): B2
175// CHECK:     Successors (1): B0
176// CHECK:  [ B0 (EXIT) ]
177// CHECK:     Predecessors (1): B1
178// CHECK:     Successors (0):
179// CHECK:  [ B2 (ENTRY) ]
180// CHECK:     Predecessors (0):
181// CHECK:     Successors (1): B1
182// CHECK:  [ B1 ]
183// CHECK:       1:
184// CHECK:       2: A a[2];
185// CHECK:       3:
186// CHECK:       4: A b[0];
187// CHECK:       5: [B1.2].~A() (Implicit destructor)
188// CHECK:     Predecessors (1): B2
189// CHECK:     Successors (1): B0
190// CHECK:  [ B0 (EXIT) ]
191// CHECK:     Predecessors (1): B1
192// CHECK:     Successors (0):
193// CHECK:  [ B2 (ENTRY) ]
194// CHECK:     Predecessors (0):
195// CHECK:     Successors (1): B1
196// CHECK:  [ B1 ]
197// CHECK:       1:
198// CHECK:       2: A a;
199// CHECK:       3:
200// CHECK:       4: A c;
201// CHECK:       5:
202// CHECK:       6: A d;
203// CHECK:       7: [B1.6].~A() (Implicit destructor)
204// CHECK:       8: [B1.4].~A() (Implicit destructor)
205// CHECK:       9:
206// CHECK:      10: A b;
207// CHECK:      11: [B1.10].~A() (Implicit destructor)
208// CHECK:      12: [B1.2].~A() (Implicit destructor)
209// CHECK:     Predecessors (1): B2
210// CHECK:     Successors (1): B0
211// CHECK:  [ B0 (EXIT) ]
212// CHECK:     Predecessors (1): B1
213// CHECK:     Successors (0):
214// CHECK:  [ B4 (ENTRY) ]
215// CHECK:     Predecessors (0):
216// CHECK:     Successors (1): B3
217// CHECK:  [ B1 ]
218// CHECK:       1:
219// CHECK:       2: A c;
220// CHECK:       3: [B1.2].~A() (Implicit destructor)
221// CHECK:       4: [B3.4].~A() (Implicit destructor)
222// CHECK:       5: [B3.2].~A() (Implicit destructor)
223// CHECK:     Predecessors (1): B3
224// CHECK:     Successors (1): B0
225// CHECK:  [ B2 ]
226// CHECK:       1: return;
227// CHECK:       2: [B3.4].~A() (Implicit destructor)
228// CHECK:       3: [B3.2].~A() (Implicit destructor)
229// CHECK:     Predecessors (1): B3
230// CHECK:     Successors (1): B0
231// CHECK:  [ B3 ]
232// CHECK:       1:
233// CHECK:       2: A a;
234// CHECK:       3:
235// CHECK:       4: A b;
236// CHECK:       5: UV
237// CHECK:       6: [B3.5]
238// CHECK:       T: if [B3.6]
239// CHECK:     Predecessors (1): B4
240// CHECK:     Successors (2): B2 B1
241// CHECK:  [ B0 (EXIT) ]
242// CHECK:     Predecessors (2): B1 B2
243// CHECK:     Successors (0):
244// CHECK:  [ B8 (ENTRY) ]
245// CHECK:     Predecessors (0):
246// CHECK:     Successors (1): B7
247// CHECK:  [ B1 ]
248// CHECK:     l1:
249// CHECK:       1:
250// CHECK:       2: A c;
251// CHECK:       3: [B1.2].~A() (Implicit destructor)
252// CHECK:       4: [B6.2].~A() (Implicit destructor)
253// CHECK:       5: [B7.2].~A() (Implicit destructor)
254// CHECK:     Predecessors (2): B2 B3
255// CHECK:     Successors (1): B0
256// CHECK:  [ B2 ]
257// CHECK:       1:
258// CHECK:       2: A b;
259// CHECK:       3: [B2.2].~A() (Implicit destructor)
260// CHECK:       4: [B6.4].~A() (Implicit destructor)
261// CHECK:     Predecessors (1): B4
262// CHECK:     Successors (1): B1
263// CHECK:  [ B3 ]
264// CHECK:       1: [B6.4].~A() (Implicit destructor)
265// CHECK:       T: goto l1;
266// CHECK:     Predecessors (1): B4
267// CHECK:     Successors (1): B1
268// CHECK:  [ B4 ]
269// CHECK:       1: UV
270// CHECK:       2: [B4.1]
271// CHECK:       T: if [B4.2]
272// CHECK:     Predecessors (1): B6
273// CHECK:     Successors (2): B3 B2
274// CHECK:  [ B5 ]
275// CHECK:       1: [B6.4].~A() (Implicit destructor)
276// CHECK:       2: [B6.2].~A() (Implicit destructor)
277// CHECK:       T: goto l0;
278// CHECK:     Predecessors (1): B6
279// CHECK:     Successors (1): B6
280// CHECK:  [ B6 ]
281// CHECK:     l0:
282// CHECK:       1:
283// CHECK:       2: A b;
284// CHECK:       3:
285// CHECK:       4: A a;
286// CHECK:       5: UV
287// CHECK:       6: [B6.5]
288// CHECK:       T: if [B6.6]
289// CHECK:     Predecessors (2): B7 B5
290// CHECK:     Successors (2): B5 B4
291// CHECK:  [ B7 ]
292// CHECK:       1:
293// CHECK:       2: A a;
294// CHECK:     Predecessors (1): B8
295// CHECK:     Successors (1): B6
296// CHECK:  [ B0 (EXIT) ]
297// CHECK:     Predecessors (1): B1
298// CHECK:     Successors (0):
299// CHECK:  [ B5 (ENTRY) ]
300// CHECK:     Predecessors (0):
301// CHECK:     Successors (1): B4
302// CHECK:  [ B1 ]
303// CHECK:       1: [B4.6].~A() (Implicit destructor)
304// CHECK:       2: [B4.2].~A() (Implicit destructor)
305// CHECK:     Predecessors (2): B2 B3
306// CHECK:     Successors (1): B0
307// CHECK:  [ B2 ]
308// CHECK:       1:
309// CHECK:       2: A c;
310// CHECK:       3: [B2.2].~A() (Implicit destructor)
311// CHECK:     Predecessors (1): B4
312// CHECK:     Successors (1): B1
313// CHECK:  [ B3 ]
314// CHECK:       1:
315// CHECK:       2: A c;
316// CHECK:       3: [B3.2].~A() (Implicit destructor)
317// CHECK:     Predecessors (1): B4
318// CHECK:     Successors (1): B1
319// CHECK:  [ B4 ]
320// CHECK:       1:
321// CHECK:       2: A a;
322// CHECK:       3: a
323// CHECK:       4: [B4.3]
324// CHECK:       5: [B4.4]
325// CHECK:       6: A b = a;
326// CHECK:       7: b
327// CHECK:       8: [B4.7]
328// CHECK:       9: [B4.8].operator int
329// CHECK:      10: [B4.9]()
330// CHECK:      11: [B4.10]
331// CHECK:      12: [B4.11]
332// CHECK:       T: if [B4.12]
333// CHECK:     Predecessors (1): B5
334// CHECK:     Successors (2): B3 B2
335// CHECK:  [ B0 (EXIT) ]
336// CHECK:     Predecessors (1): B1
337// CHECK:     Successors (0):
338// CHECK:  [ B9 (ENTRY) ]
339// CHECK:     Predecessors (0):
340// CHECK:     Successors (1): B8
341// CHECK:  [ B1 ]
342// CHECK:       1: [B8.6].~A() (Implicit destructor)
343// CHECK:       2:
344// CHECK:       3: A e;
345// CHECK:       4: [B1.3].~A() (Implicit destructor)
346// CHECK:       5: [B8.2].~A() (Implicit destructor)
347// CHECK:     Predecessors (2): B2 B5
348// CHECK:     Successors (1): B0
349// CHECK:  [ B2 ]
350// CHECK:       1:
351// CHECK:       2: A d;
352// CHECK:       3: [B2.2].~A() (Implicit destructor)
353// CHECK:       4: [B4.2].~A() (Implicit destructor)
354// CHECK:     Predecessors (1): B4
355// CHECK:     Successors (1): B1
356// CHECK:  [ B3 ]
357// CHECK:       1: return;
358// CHECK:       2: [B4.2].~A() (Implicit destructor)
359// CHECK:       3: [B8.6].~A() (Implicit destructor)
360// CHECK:       4: [B8.2].~A() (Implicit destructor)
361// CHECK:     Predecessors (1): B4
362// CHECK:     Successors (1): B0
363// CHECK:  [ B4 ]
364// CHECK:       1:
365// CHECK:       2: A c;
366// CHECK:       3: UV
367// CHECK:       4: [B4.3]
368// CHECK:       T: if [B4.4]
369// CHECK:     Predecessors (1): B8
370// CHECK:     Successors (2): B3 B2
371// CHECK:  [ B5 ]
372// CHECK:       1:
373// CHECK:       2: A d;
374// CHECK:       3: [B5.2].~A() (Implicit destructor)
375// CHECK:       4: [B7.2].~A() (Implicit destructor)
376// CHECK:     Predecessors (1): B7
377// CHECK:     Successors (1): B1
378// CHECK:  [ B6 ]
379// CHECK:       1: return;
380// CHECK:       2: [B7.2].~A() (Implicit destructor)
381// CHECK:       3: [B8.6].~A() (Implicit destructor)
382// CHECK:       4: [B8.2].~A() (Implicit destructor)
383// CHECK:     Predecessors (1): B7
384// CHECK:     Successors (1): B0
385// CHECK:  [ B7 ]
386// CHECK:       1:
387// CHECK:       2: A c;
388// CHECK:       3: UV
389// CHECK:       4: [B7.3]
390// CHECK:       T: if [B7.4]
391// CHECK:     Predecessors (1): B8
392// CHECK:     Successors (2): B6 B5
393// CHECK:  [ B8 ]
394// CHECK:       1:
395// CHECK:       2: A a;
396// CHECK:       3: a
397// CHECK:       4: [B8.3]
398// CHECK:       5: [B8.4]
399// CHECK:       6: A b = a;
400// CHECK:       7: b
401// CHECK:       8: [B8.7]
402// CHECK:       9: [B8.8].operator int
403// CHECK:      10: [B8.9]()
404// CHECK:      11: [B8.10]
405// CHECK:      12: [B8.11]
406// CHECK:       T: if [B8.12]
407// CHECK:     Predecessors (1): B9
408// CHECK:     Successors (2): B7 B4
409// CHECK:  [ B0 (EXIT) ]
410// CHECK:     Predecessors (3): B1 B3 B6
411// CHECK:     Successors (0):
412// CHECK:  [ B6 (ENTRY) ]
413// CHECK:     Predecessors (0):
414// CHECK:     Successors (1): B5
415// CHECK:  [ B1 ]
416// CHECK:       1: [B2.4].~A() (Implicit destructor)
417// CHECK:       2: [B5.2].~A() (Implicit destructor)
418// CHECK:     Predecessors (1): B2
419// CHECK:     Successors (1): B0
420// CHECK:  [ B2 ]
421// CHECK:       1: a
422// CHECK:       2: [B2.1]
423// CHECK:       3: [B2.2]
424// CHECK:       4: A b = a;
425// CHECK:       5: b
426// CHECK:       6: [B2.5]
427// CHECK:       7: [B2.6].operator int
428// CHECK:       8: [B2.7]()
429// CHECK:       9: [B2.8]
430// CHECK:      10: [B2.9]
431// CHECK:       T: while [B2.10]
432// CHECK:     Predecessors (2): B3 B5
433// CHECK:     Successors (2): B4 B1
434// CHECK:  [ B3 ]
435// CHECK:     Predecessors (1): B4
436// CHECK:     Successors (1): B2
437// CHECK:  [ B4 ]
438// CHECK:       1:
439// CHECK:       2: A c;
440// CHECK:       3: [B4.2].~A() (Implicit destructor)
441// CHECK:       4: [B2.4].~A() (Implicit destructor)
442// CHECK:     Predecessors (1): B2
443// CHECK:     Successors (1): B3
444// CHECK:  [ B5 ]
445// CHECK:       1:
446// CHECK:       2: A a;
447// CHECK:     Predecessors (1): B6
448// CHECK:     Successors (1): B2
449// CHECK:  [ B0 (EXIT) ]
450// CHECK:     Predecessors (1): B1
451// CHECK:     Successors (0):
452// CHECK:  [ B12 (ENTRY) ]
453// CHECK:     Predecessors (0):
454// CHECK:     Successors (1): B11
455// CHECK:  [ B1 ]
456// CHECK:       1: [B2.4].~A() (Implicit destructor)
457// CHECK:       2:
458// CHECK:       3: A e;
459// CHECK:       4: [B1.3].~A() (Implicit destructor)
460// CHECK:       5: [B11.2].~A() (Implicit destructor)
461// CHECK:     Predecessors (2): B9 B2
462// CHECK:     Successors (1): B0
463// CHECK:  [ B2 ]
464// CHECK:       1: a
465// CHECK:       2: [B2.1]
466// CHECK:       3: [B2.2]
467// CHECK:       4: A b = a;
468// CHECK:       5: b
469// CHECK:       6: [B2.5]
470// CHECK:       7: [B2.6].operator int
471// CHECK:       8: [B2.7]()
472// CHECK:       9: [B2.8]
473// CHECK:      10: [B2.9]
474// CHECK:       T: while [B2.10]
475// CHECK:     Predecessors (2): B3 B11
476// CHECK:     Successors (2): B10 B1
477// CHECK:  [ B3 ]
478// CHECK:     Predecessors (2): B4 B7
479// CHECK:     Successors (1): B2
480// CHECK:  [ B4 ]
481// CHECK:       1:
482// CHECK:       2: A d;
483// CHECK:       3: [B4.2].~A() (Implicit destructor)
484// CHECK:       4: [B10.2].~A() (Implicit destructor)
485// CHECK:       5: [B2.4].~A() (Implicit destructor)
486// CHECK:     Predecessors (1): B6
487// CHECK:     Successors (1): B3
488// CHECK:  [ B5 ]
489// CHECK:       1: return;
490// CHECK:       2: [B10.2].~A() (Implicit destructor)
491// CHECK:       3: [B2.4].~A() (Implicit destructor)
492// CHECK:       4: [B11.2].~A() (Implicit destructor)
493// CHECK:     Predecessors (1): B6
494// CHECK:     Successors (1): B0
495// CHECK:  [ B6 ]
496// CHECK:       1: UV
497// CHECK:       2: [B6.1]
498// CHECK:       T: if [B6.2]
499// CHECK:     Predecessors (1): B8
500// CHECK:     Successors (2): B5 B4
501// CHECK:  [ B7 ]
502// CHECK:       1: [B10.2].~A() (Implicit destructor)
503// CHECK:       2: [B2.4].~A() (Implicit destructor)
504// CHECK:       T: continue;
505// CHECK:     Predecessors (1): B8
506// CHECK:     Successors (1): B3
507// CHECK:  [ B8 ]
508// CHECK:       1: UV
509// CHECK:       2: [B8.1]
510// CHECK:       T: if [B8.2]
511// CHECK:     Predecessors (1): B10
512// CHECK:     Successors (2): B7 B6
513// CHECK:  [ B9 ]
514// CHECK:       1: [B10.2].~A() (Implicit destructor)
515// CHECK:       T: break;
516// CHECK:     Predecessors (1): B10
517// CHECK:     Successors (1): B1
518// CHECK:  [ B10 ]
519// CHECK:       1:
520// CHECK:       2: A c;
521// CHECK:       3: UV
522// CHECK:       4: [B10.3]
523// CHECK:       T: if [B10.4]
524// CHECK:     Predecessors (1): B2
525// CHECK:     Successors (2): B9 B8
526// CHECK:  [ B11 ]
527// CHECK:       1:
528// CHECK:       2: A a;
529// CHECK:     Predecessors (1): B12
530// CHECK:     Successors (1): B2
531// CHECK:  [ B0 (EXIT) ]
532// CHECK:     Predecessors (2): B1 B5
533// CHECK:     Successors (0):
534// CHECK:  [ B4 (ENTRY) ]
535// CHECK:     Predecessors (0):
536// CHECK:     Successors (1): B2
537// CHECK:  [ B1 ]
538// CHECK:       1: UV
539// CHECK:       2: [B1.1]
540// CHECK:       T: do ... while [B1.2]
541// CHECK:     Predecessors (1): B2
542// CHECK:     Successors (2): B3 B0
543// CHECK:  [ B2 ]
544// CHECK:       1:
545// CHECK:       2: A a;
546// CHECK:       3: [B2.2].~A() (Implicit destructor)
547// CHECK:     Predecessors (2): B3 B4
548// CHECK:     Successors (1): B1
549// CHECK:  [ B3 ]
550// CHECK:     Predecessors (1): B1
551// CHECK:     Successors (1): B2
552// CHECK:  [ B0 (EXIT) ]
553// CHECK:     Predecessors (1): B1
554// CHECK:     Successors (0):
555// CHECK:  [ B12 (ENTRY) ]
556// CHECK:     Predecessors (0):
557// CHECK:     Successors (1): B11
558// CHECK:  [ B1 ]
559// CHECK:       1:
560// CHECK:       2: A d;
561// CHECK:       3: [B1.2].~A() (Implicit destructor)
562// CHECK:       4: [B11.2].~A() (Implicit destructor)
563// CHECK:     Predecessors (2): B8 B2
564// CHECK:     Successors (1): B0
565// CHECK:  [ B2 ]
566// CHECK:       1: UV
567// CHECK:       2: [B2.1]
568// CHECK:       T: do ... while [B2.2]
569// CHECK:     Predecessors (2): B3 B6
570// CHECK:     Successors (2): B10 B1
571// CHECK:  [ B3 ]
572// CHECK:       1:
573// CHECK:       2: A c;
574// CHECK:       3: [B3.2].~A() (Implicit destructor)
575// CHECK:       4: [B9.2].~A() (Implicit destructor)
576// CHECK:     Predecessors (1): B5
577// CHECK:     Successors (1): B2
578// CHECK:  [ B4 ]
579// CHECK:       1: return;
580// CHECK:       2: [B9.2].~A() (Implicit destructor)
581// CHECK:       3: [B11.2].~A() (Implicit destructor)
582// CHECK:     Predecessors (1): B5
583// CHECK:     Successors (1): B0
584// CHECK:  [ B5 ]
585// CHECK:       1: UV
586// CHECK:       2: [B5.1]
587// CHECK:       T: if [B5.2]
588// CHECK:     Predecessors (1): B7
589// CHECK:     Successors (2): B4 B3
590// CHECK:  [ B6 ]
591// CHECK:       1: [B9.2].~A() (Implicit destructor)
592// CHECK:       T: continue;
593// CHECK:     Predecessors (1): B7
594// CHECK:     Successors (1): B2
595// CHECK:  [ B7 ]
596// CHECK:       1: UV
597// CHECK:       2: [B7.1]
598// CHECK:       T: if [B7.2]
599// CHECK:     Predecessors (1): B9
600// CHECK:     Successors (2): B6 B5
601// CHECK:  [ B8 ]
602// CHECK:       1: [B9.2].~A() (Implicit destructor)
603// CHECK:       T: break;
604// CHECK:     Predecessors (1): B9
605// CHECK:     Successors (1): B1
606// CHECK:  [ B9 ]
607// CHECK:       1:
608// CHECK:       2: A b;
609// CHECK:       3: UV
610// CHECK:       4: [B9.3]
611// CHECK:       T: if [B9.4]
612// CHECK:     Predecessors (2): B10 B11
613// CHECK:     Successors (2): B8 B7
614// CHECK:  [ B10 ]
615// CHECK:     Predecessors (1): B2
616// CHECK:     Successors (1): B9
617// CHECK:  [ B11 ]
618// CHECK:       1:
619// CHECK:       2: A a;
620// CHECK:     Predecessors (1): B12
621// CHECK:     Successors (1): B9
622// CHECK:  [ B0 (EXIT) ]
623// CHECK:     Predecessors (2): B1 B4
624// CHECK:     Successors (0):
625// CHECK:  [ B4 (ENTRY) ]
626// CHECK:     Predecessors (0):
627// CHECK:     Successors (1): B2
628// CHECK:  [ B1 ]
629// CHECK:       1: [B2.6].~A() (Implicit destructor)
630// CHECK:       2: [B2.2].~A() (Implicit destructor)
631// CHECK:     Predecessors (2): B3 B2
632// CHECK:     Successors (1): B0
633// CHECK:  [ B2 ]
634// CHECK:       1:
635// CHECK:       2: A a;
636// CHECK:       3: a
637// CHECK:       4: [B2.3]
638// CHECK:       5: [B2.4]
639// CHECK:       6: A b = a;
640// CHECK:       7: b
641// CHECK:       8: [B2.7]
642// CHECK:       9: [B2.8].operator int
643// CHECK:      10: [B2.9]()
644// CHECK:      11: [B2.10]
645// CHECK:       T: switch [B2.11]
646// CHECK:     Predecessors (1): B4
647// CHECK:     Successors (1): B1
648// CHECK:  [ B3 ]
649// CHECK:       1:
650// CHECK:       2: A c;
651// CHECK:       3: [B3.2].~A() (Implicit destructor)
652// CHECK:     Predecessors (0):
653// CHECK:     Successors (1): B1
654// CHECK:  [ B0 (EXIT) ]
655// CHECK:     Predecessors (1): B1
656// CHECK:     Successors (0):
657// CHECK:  [ B9 (ENTRY) ]
658// CHECK:     Predecessors (0):
659// CHECK:     Successors (1): B2
660// CHECK:  [ B1 ]
661// CHECK:       1: [B2.6].~A() (Implicit destructor)
662// CHECK:       2:
663// CHECK:       3: A g;
664// CHECK:       4: [B1.3].~A() (Implicit destructor)
665// CHECK:       5: [B2.2].~A() (Implicit destructor)
666// CHECK:     Predecessors (3): B3 B7 B2
667// CHECK:     Successors (1): B0
668// CHECK:  [ B2 ]
669// CHECK:       1:
670// CHECK:       2: A a;
671// CHECK:       3: a
672// CHECK:       4: [B2.3]
673// CHECK:       5: [B2.4]
674// CHECK:       6: A b = a;
675// CHECK:       7: b
676// CHECK:       8: [B2.7]
677// CHECK:       9: [B2.8].operator int
678// CHECK:      10: [B2.9]()
679// CHECK:      11: [B2.10]
680// CHECK:       T: switch [B2.11]
681// CHECK:     Predecessors (1): B9
682// CHECK:     Successors (3): B3 B8
683// CHECK:      B1
684// CHECK:  [ B3 ]
685// CHECK:     case 1:
686// CHECK:       T: break;
687// CHECK:     Predecessors (2): B2 B4
688// CHECK:     Successors (1): B1
689// CHECK:  [ B4 ]
690// CHECK:       1:
691// CHECK:       2: A f;
692// CHECK:       3: [B4.2].~A() (Implicit destructor)
693// CHECK:       4: [B8.2].~A() (Implicit destructor)
694// CHECK:     Predecessors (1): B6
695// CHECK:     Successors (1): B3
696// CHECK:  [ B5 ]
697// CHECK:       1: return;
698// CHECK:       2: [B8.2].~A() (Implicit destructor)
699// CHECK:       3: [B2.6].~A() (Implicit destructor)
700// CHECK:       4: [B2.2].~A() (Implicit destructor)
701// CHECK:     Predecessors (1): B6
702// CHECK:     Successors (1): B0
703// CHECK:  [ B6 ]
704// CHECK:       1: UV
705// CHECK:       2: [B6.1]
706// CHECK:       T: if [B6.2]
707// CHECK:     Predecessors (1): B8
708// CHECK:     Successors (2): B5 B4
709// CHECK:  [ B7 ]
710// CHECK:       1: [B8.2].~A() (Implicit destructor)
711// CHECK:       T: break;
712// CHECK:     Predecessors (1): B8
713// CHECK:     Successors (1): B1
714// CHECK:  [ B8 ]
715// CHECK:     case 0:
716// CHECK:       1:
717// CHECK:       2: A c;
718// CHECK:       3: UV
719// CHECK:       4: [B8.3]
720// CHECK:       T: if [B8.4]
721// CHECK:     Predecessors (1): B2
722// CHECK:     Successors (2): B7 B6
723// CHECK:  [ B0 (EXIT) ]
724// CHECK:     Predecessors (2): B1 B5
725// CHECK:     Successors (0):
726// CHECK:  [ B6 (ENTRY) ]
727// CHECK:     Predecessors (0):
728// CHECK:     Successors (1): B5
729// CHECK:  [ B1 ]
730// CHECK:       1: [B2.4].~A() (Implicit destructor)
731// CHECK:       2: [B5.2].~A() (Implicit destructor)
732// CHECK:     Predecessors (1): B2
733// CHECK:     Successors (1): B0
734// CHECK:  [ B2 ]
735// CHECK:       1: a
736// CHECK:       2: [B2.1]
737// CHECK:       3: [B2.2]
738// CHECK:       4: A b = a;
739// CHECK:       5: b
740// CHECK:       6: [B2.5]
741// CHECK:       7: [B2.6].operator int
742// CHECK:       8: [B2.7]()
743// CHECK:       9: [B2.8]
744// CHECK:      10: [B2.9]
745// CHECK:       T: for (...; [B2.10]; )
746// CHECK:     Predecessors (2): B3 B5
747// CHECK:     Successors (2): B4 B1
748// CHECK:  [ B3 ]
749// CHECK:       1: [B2.4].~A() (Implicit destructor)
750// CHECK:     Predecessors (1): B4
751// CHECK:     Successors (1): B2
752// CHECK:  [ B4 ]
753// CHECK:       1:
754// CHECK:       2: A c;
755// CHECK:       3: [B4.2].~A() (Implicit destructor)
756// CHECK:     Predecessors (1): B2
757// CHECK:     Successors (1): B3
758// CHECK:  [ B5 ]
759// CHECK:       1:
760// CHECK:       2: A a;
761// CHECK:     Predecessors (1): B6
762// CHECK:     Successors (1): B2
763// CHECK:  [ B0 (EXIT) ]
764// CHECK:     Predecessors (1): B1
765// CHECK:     Successors (0):
766// CHECK:  [ B12 (ENTRY) ]
767// CHECK:     Predecessors (0):
768// CHECK:     Successors (1): B11
769// CHECK:  [ B1 ]
770// CHECK:       1: [B2.4].~A() (Implicit destructor)
771// CHECK:       2: [B11.4].~A() (Implicit destructor)
772// CHECK:       3:
773// CHECK:       4: A f;
774// CHECK:       5: [B1.4].~A() (Implicit destructor)
775// CHECK:       6: [B11.2].~A() (Implicit destructor)
776// CHECK:     Predecessors (2): B9 B2
777// CHECK:     Successors (1): B0
778// CHECK:  [ B2 ]
779// CHECK:       1: b
780// CHECK:       2: [B2.1]
781// CHECK:       3: [B2.2]
782// CHECK:       4: A c = b;
783// CHECK:       5: c
784// CHECK:       6: [B2.5]
785// CHECK:       7: [B2.6].operator int
786// CHECK:       8: [B2.7]()
787// CHECK:       9: [B2.8]
788// CHECK:      10: [B2.9]
789// CHECK:       T: for (...; [B2.10]; )
790// CHECK:     Predecessors (2): B3 B11
791// CHECK:     Successors (2): B10 B1
792// CHECK:  [ B3 ]
793// CHECK:       1: [B2.4].~A() (Implicit destructor)
794// CHECK:     Predecessors (2): B4 B7
795// CHECK:     Successors (1): B2
796// CHECK:  [ B4 ]
797// CHECK:       1:
798// CHECK:       2: A e;
799// CHECK:       3: [B4.2].~A() (Implicit destructor)
800// CHECK:       4: [B10.2].~A() (Implicit destructor)
801// CHECK:     Predecessors (1): B6
802// CHECK:     Successors (1): B3
803// CHECK:  [ B5 ]
804// CHECK:       1: return;
805// CHECK:       2: [B10.2].~A() (Implicit destructor)
806// CHECK:       3: [B2.4].~A() (Implicit destructor)
807// CHECK:       4: [B11.4].~A() (Implicit destructor)
808// CHECK:       5: [B11.2].~A() (Implicit destructor)
809// CHECK:     Predecessors (1): B6
810// CHECK:     Successors (1): B0
811// CHECK:  [ B6 ]
812// CHECK:       1: UV
813// CHECK:       2: [B6.1]
814// CHECK:       T: if [B6.2]
815// CHECK:     Predecessors (1): B8
816// CHECK:     Successors (2): B5 B4
817// CHECK:  [ B7 ]
818// CHECK:       1: [B10.2].~A() (Implicit destructor)
819// CHECK:       T: continue;
820// CHECK:     Predecessors (1): B8
821// CHECK:     Successors (1): B3
822// CHECK:  [ B8 ]
823// CHECK:       1: UV
824// CHECK:       2: [B8.1]
825// CHECK:       T: if [B8.2]
826// CHECK:     Predecessors (1): B10
827// CHECK:     Successors (2): B7 B6
828// CHECK:  [ B9 ]
829// CHECK:       1: [B10.2].~A() (Implicit destructor)
830// CHECK:       T: break;
831// CHECK:     Predecessors (1): B10
832// CHECK:     Successors (1): B1
833// CHECK:  [ B10 ]
834// CHECK:       1:
835// CHECK:       2: A d;
836// CHECK:       3: UV
837// CHECK:       4: [B10.3]
838// CHECK:       T: if [B10.4]
839// CHECK:     Predecessors (1): B2
840// CHECK:     Successors (2): B9 B8
841// CHECK:  [ B11 ]
842// CHECK:       1:
843// CHECK:       2: A a;
844// CHECK:       3:
845// CHECK:       4: A b;
846// CHECK:     Predecessors (1): B12
847// CHECK:     Successors (1): B2
848// CHECK:  [ B0 (EXIT) ]
849// CHECK:     Predecessors (2): B1 B5
850// CHECK:     Successors (0):
851// CHECK:  [ B3 (ENTRY) ]
852// CHECK:     Predecessors (0):
853// CHECK:     Successors (1): B0
854// CHECK:  [ B1 ]
855// CHECK:       T: try ...
856// CHECK:     Predecessors (0):
857// CHECK:     Successors (2): B2 B0
858// CHECK:  [ B2 ]
859// CHECK:     catch (const A &e):
860// CHECK:     Predecessors (1): B1
861// CHECK:     Successors (1): B0
862// CHECK:  [ B0 (EXIT) ]
863// CHECK:     Predecessors (3): B2 B1 B3
864// CHECK:     Successors (0):
865// CHECK:  [ B3 (ENTRY) ]
866// CHECK:     Predecessors (0):
867// CHECK:     Successors (1): B0
868// CHECK:  [ B1 ]
869// CHECK:       T: try ...
870// CHECK:     Predecessors (0):
871// CHECK:     Successors (2): B2 B0
872// CHECK:  [ B2 ]
873// CHECK:     catch (A e):
874// CHECK:       1: .~A() (Implicit destructor)
875// CHECK:     Predecessors (1): B1
876// CHECK:     Successors (1): B0
877// CHECK:  [ B0 (EXIT) ]
878// CHECK:     Predecessors (3): B2 B1 B3
879// CHECK:     Successors (0):
880
881