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