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