auto-obj-dtors-cfg-output.cpp revision e41721e7dfabcc15cb50be9075a4153f1ad648ea
1// RUN: %clang_cc1 -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: if ([B4.6])
316// CHECK:[B3.2]else
317// CHECK:[B2.2]      5: b.operator int()
318// CHECK:      6: [B4.5]
319// CHECK:      T: if [B4.6]
320// CHECK:    Predecessors (1): B5
321// CHECK:    Successors (2): B3 B2
322// CHECK: [ B0 (EXIT) ]
323// CHECK:    Predecessors (1): B1
324// CHECK:    Successors (0):
325// CHECK: [ B9 (ENTRY) ]
326// CHECK:    Predecessors (0):
327// CHECK:    Successors (1): B8
328// CHECK: [ B1 ]
329// CHECK:      1: [B8.4].~A() (Implicit destructor)
330// CHECK:      2:
331// CHECK:      3: A e;
332// CHECK:      4: [B1.3].~A() (Implicit destructor)
333// CHECK:      5: [B8.2].~A() (Implicit destructor)
334// CHECK:    Predecessors (2): B2 B5
335// CHECK:    Successors (1): B0
336// CHECK: [ B2 ]
337// CHECK:      1:
338// CHECK:      2: A d;
339// CHECK:      3: [B2.2].~A() (Implicit destructor)
340// CHECK:      4: [B4.2].~A() (Implicit destructor)
341// CHECK:    Predecessors (1): B4
342// CHECK:    Successors (1): B1
343// CHECK: [ B3 ]
344// CHECK:      1: return;
345// CHECK:      2: [B4.2].~A() (Implicit destructor)
346// CHECK:      3: [B8.4].~A() (Implicit destructor)
347// CHECK:      4: [B8.2].~A() (Implicit destructor)
348// CHECK:    Predecessors (1): B4
349// CHECK:    Successors (1): B0
350// CHECK: [ B4 ]
351// CHECK:      1:
352// CHECK:      2: A c;
353// CHECK:      3: UV
354// CHECK:      T: if [B4.3]
355// CHECK:    Predecessors (1): B8
356// CHECK:    Successors (2): B3 B2
357// CHECK: [ B5 ]
358// CHECK:      1:
359// CHECK:      2: A d;
360// CHECK:      3: [B5.2].~A() (Implicit destructor)
361// CHECK:      4: [B7.2].~A() (Implicit destructor)
362// CHECK:    Predecessors (1): B7
363// CHECK:    Successors (1): B1
364// CHECK: [ B6 ]
365// CHECK:      1: return;
366// CHECK:      2: [B7.2].~A() (Implicit destructor)
367// CHECK:      3: [B8.4].~A() (Implicit destructor)
368// CHECK:      4: [B8.2].~A() (Implicit destructor)
369// CHECK:    Predecessors (1): B7
370// CHECK:    Successors (1): B0
371// CHECK: [ B7 ]
372// CHECK:      1:
373// CHECK:      2: A c;
374// CHECK:      3: UV
375// CHECK:      T: if [B7.3]
376// CHECK:    Predecessors (1): B8
377// CHECK:    Successors (2): B6 B5
378// CHECK: [ B8 ]
379// CHECK:      1:
380// CHECK:      2: A a;
381// CHECK:      3: a
382// CHECK:      4: if ([B8.6]) {
383// CHECK:[B7.2]    if ([B7.3])
384// CHECK:[B6.1][B5.2]} else {
385// CHECK:[B4.2]    if ([B4.3])
386// CHECK:[B3.1][B2.2]}
387// CHECK:      5: b.operator int()
388// CHECK:      6: [B8.5]
389// CHECK:      T: if [B8.6]
390// CHECK:    Predecessors (1): B9
391// CHECK:    Successors (2): B7 B4
392// CHECK: [ B0 (EXIT) ]
393// CHECK:    Predecessors (3): B1 B3 B6
394// CHECK:    Successors (0):
395// CHECK: [ B6 (ENTRY) ]
396// CHECK:    Predecessors (0):
397// CHECK:    Successors (1): B5
398// CHECK: [ B1 ]
399// CHECK:      1: [B2.2].~A() (Implicit destructor)
400// CHECK:      2: [B5.2].~A() (Implicit destructor)
401// CHECK:    Predecessors (1): B2
402// CHECK:    Successors (1): B0
403// CHECK: [ B2 ]
404// CHECK:      1: a
405// CHECK:      2: while ([B2.4])
406// CHECK:[B4.2]      3: b.operator int()
407// CHECK:      4: [B2.3]
408// CHECK:      T: while [B2.4]
409// CHECK:    Predecessors (2): B3 B5
410// CHECK:    Successors (2): B4 B1
411// CHECK: [ B3 ]
412// CHECK:    Predecessors (1): B4
413// CHECK:    Successors (1): B2
414// CHECK: [ B4 ]
415// CHECK:      1:
416// CHECK:      2: A c;
417// CHECK:      3: [B4.2].~A() (Implicit destructor)
418// CHECK:      4: [B2.2].~A() (Implicit destructor)
419// CHECK:    Predecessors (1): B2
420// CHECK:    Successors (1): B3
421// CHECK: [ B5 ]
422// CHECK:      1:
423// CHECK:      2: A a;
424// CHECK:    Predecessors (1): B6
425// CHECK:    Successors (1): B2
426// CHECK: [ B0 (EXIT) ]
427// CHECK:    Predecessors (1): B1
428// CHECK:    Successors (0):
429// CHECK: [ B12 (ENTRY) ]
430// CHECK:    Predecessors (0):
431// CHECK:    Successors (1): B11
432// CHECK: [ B1 ]
433// CHECK:      1: [B2.2].~A() (Implicit destructor)
434// CHECK:      2:
435// CHECK:      3: A e;
436// CHECK:      4: [B1.3].~A() (Implicit destructor)
437// CHECK:      5: [B11.2].~A() (Implicit destructor)
438// CHECK:    Predecessors (2): B9 B2
439// CHECK:    Successors (1): B0
440// CHECK: [ B2 ]
441// CHECK:      1: a
442// CHECK:      2: while ([B2.4])
443// CHECK:    {
444// CHECK:[B10.2]        if ([B10.3])
445// CHECK:            break;
446// CHECK:        if ([B8.1])
447// CHECK:            continue;
448// CHECK:        if ([B6.1])
449// CHECK:[B5.1][B4.2]    }
450// CHECK:      3: b.operator int()
451// CHECK:      4: [B2.3]
452// CHECK:      T: while [B2.4]
453// CHECK:    Predecessors (2): B3 B11
454// CHECK:    Successors (2): B10 B1
455// CHECK: [ B3 ]
456// CHECK:    Predecessors (2): B4 B7
457// CHECK:    Successors (1): B2
458// CHECK: [ B4 ]
459// CHECK:      1:
460// CHECK:      2: A d;
461// CHECK:      3: [B4.2].~A() (Implicit destructor)
462// CHECK:      4: [B10.2].~A() (Implicit destructor)
463// CHECK:      5: [B2.2].~A() (Implicit destructor)
464// CHECK:    Predecessors (1): B6
465// CHECK:    Successors (1): B3
466// CHECK: [ B5 ]
467// CHECK:      1: return;
468// CHECK:      2: [B10.2].~A() (Implicit destructor)
469// CHECK:      3: [B2.2].~A() (Implicit destructor)
470// CHECK:      4: [B11.2].~A() (Implicit destructor)
471// CHECK:    Predecessors (1): B6
472// CHECK:    Successors (1): B0
473// CHECK: [ B6 ]
474// CHECK:      1: UV
475// CHECK:      T: if [B6.1]
476// CHECK:    Predecessors (1): B8
477// CHECK:    Successors (2): B5 B4
478// CHECK: [ B7 ]
479// CHECK:      1: [B10.2].~A() (Implicit destructor)
480// CHECK:      2: [B2.2].~A() (Implicit destructor)
481// CHECK:      T: continue;
482// CHECK:    Predecessors (1): B8
483// CHECK:    Successors (1): B3
484// CHECK: [ B8 ]
485// CHECK:      1: UV
486// CHECK:      T: if [B8.1]
487// CHECK:    Predecessors (1): B10
488// CHECK:    Successors (2): B7 B6
489// CHECK: [ B9 ]
490// CHECK:      1: [B10.2].~A() (Implicit destructor)
491// CHECK:      T: break;
492// CHECK:    Predecessors (1): B10
493// CHECK:    Successors (1): B1
494// CHECK: [ B10 ]
495// CHECK:      1:
496// CHECK:      2: A c;
497// CHECK:      3: UV
498// CHECK:      T: if [B10.3]
499// CHECK:    Predecessors (1): B2
500// CHECK:    Successors (2): B9 B8
501// CHECK: [ B11 ]
502// CHECK:      1:
503// CHECK:      2: A a;
504// CHECK:    Predecessors (1): B12
505// CHECK:    Successors (1): B2
506// CHECK: [ B0 (EXIT) ]
507// CHECK:    Predecessors (2): B1 B5
508// CHECK:    Successors (0):
509// CHECK: [ B4 (ENTRY) ]
510// CHECK:    Predecessors (0):
511// CHECK:    Successors (1): B2
512// CHECK: [ B1 ]
513// CHECK:      1: UV
514// CHECK:      T: do ... while [B1.1]
515// CHECK:    Predecessors (1): B2
516// CHECK:    Successors (2): B3 B0
517// CHECK: [ B2 ]
518// CHECK:      1:
519// CHECK:      2: A a;
520// CHECK:      3: [B2.2].~A() (Implicit destructor)
521// CHECK:    Predecessors (2): B3 B4
522// CHECK:    Successors (1): B1
523// CHECK: [ B3 ]
524// CHECK:    Predecessors (1): B1
525// CHECK:    Successors (1): B2
526// CHECK: [ B0 (EXIT) ]
527// CHECK:    Predecessors (1): B1
528// CHECK:    Successors (0):
529// CHECK: [ B12 (ENTRY) ]
530// CHECK:    Predecessors (0):
531// CHECK:    Successors (1): B11
532// CHECK: [ B1 ]
533// CHECK:      1:
534// CHECK:      2: A d;
535// CHECK:      3: [B1.2].~A() (Implicit destructor)
536// CHECK:      4: [B11.2].~A() (Implicit destructor)
537// CHECK:    Predecessors (2): B8 B2
538// CHECK:    Successors (1): B0
539// CHECK: [ B2 ]
540// CHECK:      1: UV
541// CHECK:      T: do ... while [B2.1]
542// CHECK:    Predecessors (2): B3 B6
543// CHECK:    Successors (2): B10 B1
544// CHECK: [ B3 ]
545// CHECK:      1:
546// CHECK:      2: A c;
547// CHECK:      3: [B3.2].~A() (Implicit destructor)
548// CHECK:      4: [B9.2].~A() (Implicit destructor)
549// CHECK:    Predecessors (1): B5
550// CHECK:    Successors (1): B2
551// CHECK: [ B4 ]
552// CHECK:      1: return;
553// CHECK:      2: [B9.2].~A() (Implicit destructor)
554// CHECK:      3: [B11.2].~A() (Implicit destructor)
555// CHECK:    Predecessors (1): B5
556// CHECK:    Successors (1): B0
557// CHECK: [ B5 ]
558// CHECK:      1: UV
559// CHECK:      T: if [B5.1]
560// CHECK:    Predecessors (1): B7
561// CHECK:    Successors (2): B4 B3
562// CHECK: [ B6 ]
563// CHECK:      1: [B9.2].~A() (Implicit destructor)
564// CHECK:      T: continue;
565// CHECK:    Predecessors (1): B7
566// CHECK:    Successors (1): B2
567// CHECK: [ B7 ]
568// CHECK:      1: UV
569// CHECK:      T: if [B7.1]
570// CHECK:    Predecessors (1): B9
571// CHECK:    Successors (2): B6 B5
572// CHECK: [ B8 ]
573// CHECK:      1: [B9.2].~A() (Implicit destructor)
574// CHECK:      T: break;
575// CHECK:    Predecessors (1): B9
576// CHECK:    Successors (1): B1
577// CHECK: [ B9 ]
578// CHECK:      1:
579// CHECK:      2: A b;
580// CHECK:      3: UV
581// CHECK:      T: if [B9.3]
582// CHECK:    Predecessors (2): B10 B11
583// CHECK:    Successors (2): B8 B7
584// CHECK: [ B10 ]
585// CHECK:    Predecessors (1): B2
586// CHECK:    Successors (1): B9
587// CHECK: [ B11 ]
588// CHECK:      1:
589// CHECK:      2: A a;
590// CHECK:    Predecessors (1): B12
591// CHECK:    Successors (1): B9
592// CHECK: [ B0 (EXIT) ]
593// CHECK:    Predecessors (2): B1 B4
594// CHECK:    Successors (0):
595// CHECK: [ B4 (ENTRY) ]
596// CHECK:    Predecessors (0):
597// CHECK:    Successors (1): B2
598// CHECK: [ B1 ]
599// CHECK:      1: [B2.4].~A() (Implicit destructor)
600// CHECK:      2: [B2.2].~A() (Implicit destructor)
601// CHECK:    Predecessors (2): B3 B2
602// CHECK:    Successors (1): B0
603// CHECK: [ B2 ]
604// CHECK:      1:
605// CHECK:      2: A a;
606// CHECK:      3: a
607// CHECK:      4: switch ([B2.5])
608// CHECK:[B3.2]      5: b.operator int()
609// CHECK:      T: switch [B2.5]
610// CHECK:    Predecessors (1): B4
611// CHECK:    Successors (1): B1
612// CHECK: [ B3 ]
613// CHECK:      1:
614// CHECK:      2: A c;
615// CHECK:      3: [B3.2].~A() (Implicit destructor)
616// CHECK:    Predecessors (0):
617// CHECK:    Successors (1): B1
618// CHECK: [ B0 (EXIT) ]
619// CHECK:    Predecessors (1): B1
620// CHECK:    Successors (0):
621// CHECK: [ B9 (ENTRY) ]
622// CHECK:    Predecessors (0):
623// CHECK:    Successors (1): B2
624// CHECK: [ B1 ]
625// CHECK:      1: [B2.4].~A() (Implicit destructor)
626// CHECK:      2:
627// CHECK:      3: A g;
628// CHECK:      4: [B1.3].~A() (Implicit destructor)
629// CHECK:      5: [B2.2].~A() (Implicit destructor)
630// CHECK:    Predecessors (3): B3 B7 B2
631// CHECK:    Successors (1): B0
632// CHECK: [ B2 ]
633// CHECK:      1:
634// CHECK:      2: A a;
635// CHECK:      3: a
636// CHECK:      4: switch ([B2.5]) {
637// CHECK:  case 0:
638// CHECK:    {
639// CHECK:[B8.2]        if ([B8.3])
640// CHECK:            break;
641// CHECK:        if ([B6.1])
642// CHECK:[B5.1][B4.2]    }
643// CHECK:  case 1:
644// CHECK:    break;
645// CHECK:}
646// CHECK:      5: b.operator int()
647// CHECK:      T: switch [B2.5]
648// CHECK:    Predecessors (1): B9
649// CHECK:    Successors (3): B3 B8
650// CHECK:     B1
651// CHECK: [ B3 ]
652// CHECK:    case 1:
653// CHECK:      T: break;
654// CHECK:    Predecessors (2): B2 B4
655// CHECK:    Successors (1): B1
656// CHECK: [ B4 ]
657// CHECK:      1:
658// CHECK:      2: A f;
659// CHECK:      3: [B4.2].~A() (Implicit destructor)
660// CHECK:      4: [B8.2].~A() (Implicit destructor)
661// CHECK:    Predecessors (1): B6
662// CHECK:    Successors (1): B3
663// CHECK: [ B5 ]
664// CHECK:      1: return;
665// CHECK:      2: [B8.2].~A() (Implicit destructor)
666// CHECK:      3: [B2.4].~A() (Implicit destructor)
667// CHECK:      4: [B2.2].~A() (Implicit destructor)
668// CHECK:    Predecessors (1): B6
669// CHECK:    Successors (1): B0
670// CHECK: [ B6 ]
671// CHECK:      1: UV
672// CHECK:      T: if [B6.1]
673// CHECK:    Predecessors (1): B8
674// CHECK:    Successors (2): B5 B4
675// CHECK: [ B7 ]
676// CHECK:      1: [B8.2].~A() (Implicit destructor)
677// CHECK:      T: break;
678// CHECK:    Predecessors (1): B8
679// CHECK:    Successors (1): B1
680// CHECK: [ B8 ]
681// CHECK:    case 0:
682// CHECK:      1:
683// CHECK:      2: A c;
684// CHECK:      3: UV
685// CHECK:      T: if [B8.3]
686// CHECK:    Predecessors (1): B2
687// CHECK:    Successors (2): B7 B6
688// CHECK: [ B0 (EXIT) ]
689// CHECK:    Predecessors (2): B1 B5
690// CHECK:    Successors (0):
691// CHECK: [ B6 (ENTRY) ]
692// CHECK:    Predecessors (0):
693// CHECK:    Successors (1): B5
694// CHECK: [ B1 ]
695// CHECK:      1: [B2.2].~A() (Implicit destructor)
696// CHECK:      2: [B5.2].~A() (Implicit destructor)
697// CHECK:    Predecessors (1): B2
698// CHECK:    Successors (1): B0
699// CHECK: [ B2 ]
700// CHECK:      1: a
701// CHECK:      2: for (A a; [B2.4];)
702// CHECK:[B4.2]      3: b.operator int()
703// CHECK:      4: [B2.3]
704// CHECK:      T: for (...; [B2.4]; )
705// CHECK:    Predecessors (2): B3 B5
706// CHECK:    Successors (2): B4 B1
707// CHECK: [ B3 ]
708// CHECK:      1: [B2.2].~A() (Implicit destructor)
709// CHECK:    Predecessors (1): B4
710// CHECK:    Successors (1): B2
711// CHECK: [ B4 ]
712// CHECK:      1:
713// CHECK:      2: A c;
714// CHECK:      3: [B4.2].~A() (Implicit destructor)
715// CHECK:    Predecessors (1): B2
716// CHECK:    Successors (1): B3
717// CHECK: [ B5 ]
718// CHECK:      1:
719// CHECK:      2: A a;
720// CHECK:    Predecessors (1): B6
721// CHECK:    Successors (1): B2
722// CHECK: [ B0 (EXIT) ]
723// CHECK:    Predecessors (1): B1
724// CHECK:    Successors (0):
725// CHECK: [ B12 (ENTRY) ]
726// CHECK:    Predecessors (0):
727// CHECK:    Successors (1): B11
728// CHECK: [ B1 ]
729// CHECK:      1: [B2.2].~A() (Implicit destructor)
730// CHECK:      2: [B11.4].~A() (Implicit destructor)
731// CHECK:      3:
732// CHECK:      4: A f;
733// CHECK:      5: [B1.4].~A() (Implicit destructor)
734// CHECK:      6: [B11.2].~A() (Implicit destructor)
735// CHECK:    Predecessors (2): B9 B2
736// CHECK:    Successors (1): B0
737// CHECK: [ B2 ]
738// CHECK:      1: b
739// CHECK:      2: for (A b; [B2.4];) {
740// CHECK:[B10.2]    if ([B10.3])
741// CHECK:        break;
742// CHECK:    if ([B8.1])
743// CHECK:        continue;
744// CHECK:    if ([B6.1])
745// CHECK:[B5.1][B4.2]}
746// CHECK:      3: c.operator int()
747// CHECK:      4: [B2.3]
748// CHECK:      T: for (...; [B2.4]; )
749// CHECK:    Predecessors (2): B3 B11
750// CHECK:    Successors (2): B10 B1
751// CHECK: [ B3 ]
752// CHECK:      1: [B2.2].~A() (Implicit destructor)
753// CHECK:    Predecessors (2): B4 B7
754// CHECK:    Successors (1): B2
755// CHECK: [ B4 ]
756// CHECK:      1:
757// CHECK:      2: A e;
758// CHECK:      3: [B4.2].~A() (Implicit destructor)
759// CHECK:      4: [B10.2].~A() (Implicit destructor)
760// CHECK:    Predecessors (1): B6
761// CHECK:    Successors (1): B3
762// CHECK: [ B5 ]
763// CHECK:      1: return;
764// CHECK:      2: [B10.2].~A() (Implicit destructor)
765// CHECK:      3: [B2.2].~A() (Implicit destructor)
766// CHECK:      4: [B11.4].~A() (Implicit destructor)
767// CHECK:      5: [B11.2].~A() (Implicit destructor)
768// CHECK:    Predecessors (1): B6
769// CHECK:    Successors (1): B0
770// CHECK: [ B6 ]
771// CHECK:      1: UV
772// CHECK:      T: if [B6.1]
773// CHECK:    Predecessors (1): B8
774// CHECK:    Successors (2): B5 B4
775// CHECK: [ B7 ]
776// CHECK:      1: [B10.2].~A() (Implicit destructor)
777// CHECK:      T: continue;
778// CHECK:    Predecessors (1): B8
779// CHECK:    Successors (1): B3
780// CHECK: [ B8 ]
781// CHECK:      1: UV
782// CHECK:      T: if [B8.1]
783// CHECK:    Predecessors (1): B10
784// CHECK:    Successors (2): B7 B6
785// CHECK: [ B9 ]
786// CHECK:      1: [B10.2].~A() (Implicit destructor)
787// CHECK:      T: break;
788// CHECK:    Predecessors (1): B10
789// CHECK:    Successors (1): B1
790// CHECK: [ B10 ]
791// CHECK:      1:
792// CHECK:      2: A d;
793// CHECK:      3: UV
794// CHECK:      T: if [B10.3]
795// CHECK:    Predecessors (1): B2
796// CHECK:    Successors (2): B9 B8
797// CHECK: [ B11 ]
798// CHECK:      1:
799// CHECK:      2: A a;
800// CHECK:      3:
801// CHECK:      4: A b;
802// CHECK:    Predecessors (1): B12
803// CHECK:    Successors (1): B2
804// CHECK: [ B0 (EXIT) ]
805// CHECK:    Predecessors (2): B1 B5
806// CHECK:    Successors (0):
807// CHECK: [ B3 (ENTRY) ]
808// CHECK:    Predecessors (0):
809// CHECK:    Successors (1): B0
810// CHECK: [ B1 ]
811// CHECK:      T: try ...
812// CHECK:    Predecessors (0):
813// CHECK:    Successors (2): B2 B0
814// CHECK: [ B2 ]
815// CHECK:    catch (const A &e):
816// CHECK:    Predecessors (1): B1
817// CHECK:    Successors (1): B0
818// CHECK: [ B0 (EXIT) ]
819// CHECK:    Predecessors (3): B2 B1 B3
820// CHECK:    Successors (0):
821// CHECK: [ B3 (ENTRY) ]
822// CHECK:    Predecessors (0):
823// CHECK:    Successors (1): B0
824// CHECK: [ B1 ]
825// CHECK:      T: try ...
826// CHECK:    Predecessors (0):
827// CHECK:    Successors (2): B2 B0
828// CHECK: [ B2 ]
829// CHECK:    catch (A e):
830// CHECK:      1: .~A() (Implicit destructor)
831// CHECK:    Predecessors (1): B1
832// CHECK:    Successors (1): B0
833// CHECK: [ B0 (EXIT) ]
834// CHECK:    Predecessors (3): B2 B1 B3
835// CHECK:    Successors (0):
836