blob: 8a6c55b60be8839dc7b2293bbc449e06aade9d6b [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
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
Marcin Swiderski04e046c2010-10-01 00:52:17 +000047void 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
Marcin Swiderski05adedc2010-10-01 01:14:17 +000068void 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
Marcin Swiderski8ae60582010-10-01 01:24:41 +0000103void 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
Marcin Swiderski47575f12010-10-01 01:38:14 +0000124void 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
Marcin Swiderski0e97bcb2010-10-01 01:46:52 +0000141void 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
Marcin Swiderskifcb72ac2010-10-01 00:23:17 +0000153// 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):
Marcin Swiderski04e046c2010-10-01 00:52:17 +0000258// 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):
Marcin Swiderski05adedc2010-10-01 01:14:17 +0000353// 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):
Marcin Swiderski8ae60582010-10-01 01:24:41 +0000542// 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):
Marcin Swiderski47575f12010-10-01 01:38:14 +0000632// 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):
Marcin Swiderski0e97bcb2010-10-01 01:46:52 +0000741// 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):