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