blob: c877061eb6aeeafdb08003b8389cd719da6003d6 [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
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000158// CHECK: [ B2 (ENTRY) ]
Marcin Swiderskib1c52872010-10-25 07:00:40 +0000159// CHECK: Predecessors (0):
160// CHECK: Successors (1): B1
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000161// CHECK: [ B1 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000162// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000163// CHECK: 2: A a;
164// CHECK: 3: const A &b = a;
165// CHECK: 4: A()
166// CHECK: 5: const A &c = A();
167// CHECK: 6: [B1.5].~A() (Implicit destructor)
168// CHECK: 7: [B1.2].~A() (Implicit destructor)
Marcin Swiderskib1c52872010-10-25 07:00:40 +0000169// CHECK: Predecessors (1): B2
170// CHECK: Successors (1): B0
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000171// CHECK: [ B0 (EXIT) ]
Marcin Swiderskib1c52872010-10-25 07:00:40 +0000172// CHECK: Predecessors (1): B1
173// CHECK: Successors (0):
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000174// CHECK: [ B2 (ENTRY) ]
175// CHECK: Predecessors (0):
176// CHECK: Successors (1): B1
177// CHECK: [ B1 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000178// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000179// CHECK: 2: A a[2];
Ted Kremenekd40066b2011-04-04 23:29:12 +0000180// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000181// CHECK: 4: A b[0];
182// CHECK: 5: [B1.2].~A() (Implicit destructor)
183// CHECK: Predecessors (1): B2
184// CHECK: Successors (1): B0
185// CHECK: [ B0 (EXIT) ]
186// CHECK: Predecessors (1): B1
187// CHECK: Successors (0):
188// CHECK: [ B2 (ENTRY) ]
189// CHECK: Predecessors (0):
190// CHECK: Successors (1): B1
191// CHECK: [ B1 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000192// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000193// CHECK: 2: A a;
Ted Kremenekd40066b2011-04-04 23:29:12 +0000194// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000195// CHECK: 4: A c;
Ted Kremenekd40066b2011-04-04 23:29:12 +0000196// CHECK: 5:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000197// CHECK: 6: A d;
198// CHECK: 7: [B1.6].~A() (Implicit destructor)
199// CHECK: 8: [B1.4].~A() (Implicit destructor)
Ted Kremenekd40066b2011-04-04 23:29:12 +0000200// CHECK: 9:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000201// CHECK: 10: A b;
202// CHECK: 11: [B1.10].~A() (Implicit destructor)
203// CHECK: 12: [B1.2].~A() (Implicit destructor)
204// CHECK: Predecessors (1): B2
205// CHECK: Successors (1): B0
206// CHECK: [ B0 (EXIT) ]
207// CHECK: Predecessors (1): B1
208// CHECK: Successors (0):
209// CHECK: [ B4 (ENTRY) ]
210// CHECK: Predecessors (0):
211// CHECK: Successors (1): B3
212// CHECK: [ B1 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000213// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000214// CHECK: 2: A c;
215// CHECK: 3: [B1.2].~A() (Implicit destructor)
216// CHECK: 4: [B3.4].~A() (Implicit destructor)
217// CHECK: 5: [B3.2].~A() (Implicit destructor)
218// CHECK: Predecessors (1): B3
219// CHECK: Successors (1): B0
220// CHECK: [ B2 ]
221// CHECK: 1: return;
222// CHECK: 2: [B3.4].~A() (Implicit destructor)
223// CHECK: 3: [B3.2].~A() (Implicit destructor)
224// CHECK: Predecessors (1): B3
225// CHECK: Successors (1): B0
226// CHECK: [ B3 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000227// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000228// CHECK: 2: A a;
Ted Kremenekd40066b2011-04-04 23:29:12 +0000229// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000230// CHECK: 4: A b;
231// CHECK: 5: UV
232// CHECK: T: if [B3.5]
233// CHECK: Predecessors (1): B4
234// CHECK: Successors (2): B2 B1
235// CHECK: [ B0 (EXIT) ]
236// CHECK: Predecessors (2): B1 B2
237// CHECK: Successors (0):
238// CHECK: [ B8 (ENTRY) ]
239// CHECK: Predecessors (0):
240// CHECK: Successors (1): B7
241// CHECK: [ B1 ]
242// CHECK: l1:
Ted Kremenekd40066b2011-04-04 23:29:12 +0000243// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000244// CHECK: 2: A c;
245// CHECK: 3: [B1.2].~A() (Implicit destructor)
246// CHECK: 4: [B6.2].~A() (Implicit destructor)
247// CHECK: 5: [B7.2].~A() (Implicit destructor)
248// CHECK: Predecessors (2): B2 B3
249// CHECK: Successors (1): B0
250// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000251// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000252// CHECK: 2: A b;
253// CHECK: 3: [B2.2].~A() (Implicit destructor)
254// CHECK: 4: [B6.4].~A() (Implicit destructor)
255// CHECK: Predecessors (1): B4
256// CHECK: Successors (1): B1
257// CHECK: [ B3 ]
258// CHECK: 1: [B6.4].~A() (Implicit destructor)
259// CHECK: T: goto l1;
260// CHECK: Predecessors (1): B4
261// CHECK: Successors (1): B1
262// CHECK: [ B4 ]
263// CHECK: 1: UV
264// CHECK: T: if [B4.1]
265// CHECK: Predecessors (1): B6
266// CHECK: Successors (2): B3 B2
267// CHECK: [ B5 ]
268// CHECK: 1: [B6.4].~A() (Implicit destructor)
269// CHECK: 2: [B6.2].~A() (Implicit destructor)
270// CHECK: T: goto l0;
271// CHECK: Predecessors (1): B6
272// CHECK: Successors (1): B6
273// CHECK: [ B6 ]
274// CHECK: l0:
Ted Kremenekd40066b2011-04-04 23:29:12 +0000275// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000276// CHECK: 2: A b;
Ted Kremenekd40066b2011-04-04 23:29:12 +0000277// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000278// CHECK: 4: A a;
279// CHECK: 5: UV
280// CHECK: T: if [B6.5]
281// CHECK: Predecessors (2): B7 B5
282// CHECK: Successors (2): B5 B4
283// CHECK: [ B7 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000284// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000285// CHECK: 2: A a;
286// CHECK: Predecessors (1): B8
287// CHECK: Successors (1): B6
288// CHECK: [ B0 (EXIT) ]
289// CHECK: Predecessors (1): B1
290// CHECK: Successors (0):
291// CHECK: [ B5 (ENTRY) ]
292// CHECK: Predecessors (0):
293// CHECK: Successors (1): B4
294// CHECK: [ B1 ]
295// CHECK: 1: [B4.4].~A() (Implicit destructor)
296// CHECK: 2: [B4.2].~A() (Implicit destructor)
297// CHECK: Predecessors (2): B2 B3
298// CHECK: Successors (1): B0
299// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000300// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000301// CHECK: 2: A c;
302// CHECK: 3: [B2.2].~A() (Implicit destructor)
303// CHECK: Predecessors (1): B4
304// CHECK: Successors (1): B1
305// CHECK: [ B3 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000306// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000307// CHECK: 2: A c;
308// CHECK: 3: [B3.2].~A() (Implicit destructor)
309// CHECK: Predecessors (1): B4
310// CHECK: Successors (1): B1
311// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000312// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000313// CHECK: 2: A a;
314// CHECK: 3: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000315// CHECK: 4: A b = a;
316// CHECK: 5: b.operator int()
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000317// CHECK: 6: [B4.5]
318// CHECK: T: if [B4.6]
319// CHECK: Predecessors (1): B5
320// CHECK: Successors (2): B3 B2
321// CHECK: [ B0 (EXIT) ]
322// CHECK: Predecessors (1): B1
323// CHECK: Successors (0):
324// CHECK: [ B9 (ENTRY) ]
325// CHECK: Predecessors (0):
326// CHECK: Successors (1): B8
327// CHECK: [ B1 ]
328// CHECK: 1: [B8.4].~A() (Implicit destructor)
Ted Kremenekd40066b2011-04-04 23:29:12 +0000329// CHECK: 2:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000330// CHECK: 3: A e;
331// CHECK: 4: [B1.3].~A() (Implicit destructor)
332// CHECK: 5: [B8.2].~A() (Implicit destructor)
333// CHECK: Predecessors (2): B2 B5
334// CHECK: Successors (1): B0
335// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000336// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000337// CHECK: 2: A d;
338// CHECK: 3: [B2.2].~A() (Implicit destructor)
339// CHECK: 4: [B4.2].~A() (Implicit destructor)
340// CHECK: Predecessors (1): B4
341// CHECK: Successors (1): B1
342// CHECK: [ B3 ]
343// CHECK: 1: return;
344// CHECK: 2: [B4.2].~A() (Implicit destructor)
345// CHECK: 3: [B8.4].~A() (Implicit destructor)
346// CHECK: 4: [B8.2].~A() (Implicit destructor)
347// CHECK: Predecessors (1): B4
348// CHECK: Successors (1): B0
349// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000350// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000351// CHECK: 2: A c;
352// CHECK: 3: UV
353// CHECK: T: if [B4.3]
354// CHECK: Predecessors (1): B8
355// CHECK: Successors (2): B3 B2
356// CHECK: [ B5 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000357// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000358// CHECK: 2: A d;
359// CHECK: 3: [B5.2].~A() (Implicit destructor)
360// CHECK: 4: [B7.2].~A() (Implicit destructor)
361// CHECK: Predecessors (1): B7
362// CHECK: Successors (1): B1
363// CHECK: [ B6 ]
364// CHECK: 1: return;
365// CHECK: 2: [B7.2].~A() (Implicit destructor)
366// CHECK: 3: [B8.4].~A() (Implicit destructor)
367// CHECK: 4: [B8.2].~A() (Implicit destructor)
368// CHECK: Predecessors (1): B7
369// CHECK: Successors (1): B0
370// CHECK: [ B7 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000371// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000372// CHECK: 2: A c;
373// CHECK: 3: UV
374// CHECK: T: if [B7.3]
375// CHECK: Predecessors (1): B8
376// CHECK: Successors (2): B6 B5
377// CHECK: [ B8 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000378// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000379// CHECK: 2: A a;
380// CHECK: 3: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000381// CHECK: 4: A b = a;
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000382// CHECK: 5: b.operator int()
383// CHECK: 6: [B8.5]
384// CHECK: T: if [B8.6]
385// CHECK: Predecessors (1): B9
386// CHECK: Successors (2): B7 B4
387// CHECK: [ B0 (EXIT) ]
388// CHECK: Predecessors (3): B1 B3 B6
389// CHECK: Successors (0):
390// CHECK: [ B6 (ENTRY) ]
391// CHECK: Predecessors (0):
392// CHECK: Successors (1): B5
393// CHECK: [ B1 ]
394// CHECK: 1: [B2.2].~A() (Implicit destructor)
395// CHECK: 2: [B5.2].~A() (Implicit destructor)
396// CHECK: Predecessors (1): B2
397// CHECK: Successors (1): B0
398// CHECK: [ B2 ]
399// CHECK: 1: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000400// CHECK: 2: A b = a;
401// CHECK: 3: b.operator int()
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000402// CHECK: 4: [B2.3]
403// CHECK: T: while [B2.4]
404// CHECK: Predecessors (2): B3 B5
405// CHECK: Successors (2): B4 B1
406// CHECK: [ B3 ]
407// CHECK: Predecessors (1): B4
408// CHECK: Successors (1): B2
409// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000410// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000411// CHECK: 2: A c;
412// CHECK: 3: [B4.2].~A() (Implicit destructor)
413// CHECK: 4: [B2.2].~A() (Implicit destructor)
414// CHECK: Predecessors (1): B2
415// CHECK: Successors (1): B3
416// CHECK: [ B5 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000417// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000418// CHECK: 2: A a;
419// CHECK: Predecessors (1): B6
420// CHECK: Successors (1): B2
421// CHECK: [ B0 (EXIT) ]
422// CHECK: Predecessors (1): B1
423// CHECK: Successors (0):
424// CHECK: [ B12 (ENTRY) ]
425// CHECK: Predecessors (0):
426// CHECK: Successors (1): B11
427// CHECK: [ B1 ]
428// CHECK: 1: [B2.2].~A() (Implicit destructor)
Ted Kremenekd40066b2011-04-04 23:29:12 +0000429// CHECK: 2:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000430// CHECK: 3: A e;
431// CHECK: 4: [B1.3].~A() (Implicit destructor)
432// CHECK: 5: [B11.2].~A() (Implicit destructor)
433// CHECK: Predecessors (2): B9 B2
434// CHECK: Successors (1): B0
435// CHECK: [ B2 ]
436// CHECK: 1: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000437// CHECK: 2: A b = a;
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000438// CHECK: 3: b.operator int()
439// CHECK: 4: [B2.3]
440// CHECK: T: while [B2.4]
441// CHECK: Predecessors (2): B3 B11
442// CHECK: Successors (2): B10 B1
443// CHECK: [ B3 ]
444// CHECK: Predecessors (2): B4 B7
445// CHECK: Successors (1): B2
446// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000447// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000448// CHECK: 2: A d;
449// CHECK: 3: [B4.2].~A() (Implicit destructor)
450// CHECK: 4: [B10.2].~A() (Implicit destructor)
451// CHECK: 5: [B2.2].~A() (Implicit destructor)
452// CHECK: Predecessors (1): B6
453// CHECK: Successors (1): B3
454// CHECK: [ B5 ]
455// CHECK: 1: return;
456// CHECK: 2: [B10.2].~A() (Implicit destructor)
457// CHECK: 3: [B2.2].~A() (Implicit destructor)
458// CHECK: 4: [B11.2].~A() (Implicit destructor)
459// CHECK: Predecessors (1): B6
460// CHECK: Successors (1): B0
461// CHECK: [ B6 ]
462// CHECK: 1: UV
463// CHECK: T: if [B6.1]
464// CHECK: Predecessors (1): B8
465// CHECK: Successors (2): B5 B4
466// CHECK: [ B7 ]
467// CHECK: 1: [B10.2].~A() (Implicit destructor)
468// CHECK: 2: [B2.2].~A() (Implicit destructor)
469// CHECK: T: continue;
470// CHECK: Predecessors (1): B8
471// CHECK: Successors (1): B3
472// CHECK: [ B8 ]
473// CHECK: 1: UV
474// CHECK: T: if [B8.1]
475// CHECK: Predecessors (1): B10
476// CHECK: Successors (2): B7 B6
477// CHECK: [ B9 ]
478// CHECK: 1: [B10.2].~A() (Implicit destructor)
479// CHECK: T: break;
480// CHECK: Predecessors (1): B10
481// CHECK: Successors (1): B1
482// CHECK: [ B10 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000483// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000484// CHECK: 2: A c;
485// CHECK: 3: UV
486// CHECK: T: if [B10.3]
487// CHECK: Predecessors (1): B2
488// CHECK: Successors (2): B9 B8
489// CHECK: [ B11 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000490// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000491// CHECK: 2: A a;
492// CHECK: Predecessors (1): B12
493// CHECK: Successors (1): B2
494// CHECK: [ B0 (EXIT) ]
495// CHECK: Predecessors (2): B1 B5
496// CHECK: Successors (0):
497// CHECK: [ B4 (ENTRY) ]
498// CHECK: Predecessors (0):
499// CHECK: Successors (1): B2
500// CHECK: [ B1 ]
501// CHECK: 1: UV
502// CHECK: T: do ... while [B1.1]
503// CHECK: Predecessors (1): B2
504// CHECK: Successors (2): B3 B0
505// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000506// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000507// CHECK: 2: A a;
508// CHECK: 3: [B2.2].~A() (Implicit destructor)
509// CHECK: Predecessors (2): B3 B4
510// CHECK: Successors (1): B1
511// CHECK: [ B3 ]
512// CHECK: Predecessors (1): B1
513// CHECK: Successors (1): B2
514// CHECK: [ B0 (EXIT) ]
515// CHECK: Predecessors (1): B1
516// CHECK: Successors (0):
517// CHECK: [ B12 (ENTRY) ]
518// CHECK: Predecessors (0):
519// CHECK: Successors (1): B11
520// CHECK: [ B1 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000521// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000522// CHECK: 2: A d;
523// CHECK: 3: [B1.2].~A() (Implicit destructor)
524// CHECK: 4: [B11.2].~A() (Implicit destructor)
525// CHECK: Predecessors (2): B8 B2
526// CHECK: Successors (1): B0
527// CHECK: [ B2 ]
528// CHECK: 1: UV
529// CHECK: T: do ... while [B2.1]
530// CHECK: Predecessors (2): B3 B6
531// CHECK: Successors (2): B10 B1
532// CHECK: [ B3 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000533// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000534// CHECK: 2: A c;
535// CHECK: 3: [B3.2].~A() (Implicit destructor)
536// CHECK: 4: [B9.2].~A() (Implicit destructor)
537// CHECK: Predecessors (1): B5
538// CHECK: Successors (1): B2
539// CHECK: [ B4 ]
540// CHECK: 1: return;
541// CHECK: 2: [B9.2].~A() (Implicit destructor)
542// CHECK: 3: [B11.2].~A() (Implicit destructor)
543// CHECK: Predecessors (1): B5
544// CHECK: Successors (1): B0
545// CHECK: [ B5 ]
546// CHECK: 1: UV
547// CHECK: T: if [B5.1]
548// CHECK: Predecessors (1): B7
549// CHECK: Successors (2): B4 B3
550// CHECK: [ B6 ]
551// CHECK: 1: [B9.2].~A() (Implicit destructor)
552// CHECK: T: continue;
553// CHECK: Predecessors (1): B7
554// CHECK: Successors (1): B2
555// CHECK: [ B7 ]
556// CHECK: 1: UV
557// CHECK: T: if [B7.1]
558// CHECK: Predecessors (1): B9
559// CHECK: Successors (2): B6 B5
560// CHECK: [ B8 ]
561// CHECK: 1: [B9.2].~A() (Implicit destructor)
562// CHECK: T: break;
563// CHECK: Predecessors (1): B9
564// CHECK: Successors (1): B1
565// CHECK: [ B9 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000566// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000567// CHECK: 2: A b;
568// CHECK: 3: UV
569// CHECK: T: if [B9.3]
570// CHECK: Predecessors (2): B10 B11
571// CHECK: Successors (2): B8 B7
572// CHECK: [ B10 ]
573// CHECK: Predecessors (1): B2
574// CHECK: Successors (1): B9
575// CHECK: [ B11 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000576// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000577// CHECK: 2: A a;
578// CHECK: Predecessors (1): B12
579// CHECK: Successors (1): B9
580// CHECK: [ B0 (EXIT) ]
581// CHECK: Predecessors (2): B1 B4
582// CHECK: Successors (0):
583// CHECK: [ B4 (ENTRY) ]
584// CHECK: Predecessors (0):
585// CHECK: Successors (1): B2
586// CHECK: [ B1 ]
587// CHECK: 1: [B2.4].~A() (Implicit destructor)
588// CHECK: 2: [B2.2].~A() (Implicit destructor)
589// CHECK: Predecessors (2): B3 B2
590// CHECK: Successors (1): B0
591// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000592// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000593// CHECK: 2: A a;
594// CHECK: 3: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000595// CHECK: 4: A b = a;
596// CHECK: 5: b.operator int()
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000597// CHECK: T: switch [B2.5]
598// CHECK: Predecessors (1): B4
599// CHECK: Successors (1): B1
600// CHECK: [ B3 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000601// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000602// CHECK: 2: A c;
603// CHECK: 3: [B3.2].~A() (Implicit destructor)
604// CHECK: Predecessors (0):
605// CHECK: Successors (1): B1
606// CHECK: [ B0 (EXIT) ]
607// CHECK: Predecessors (1): B1
608// CHECK: Successors (0):
609// CHECK: [ B9 (ENTRY) ]
610// CHECK: Predecessors (0):
611// CHECK: Successors (1): B2
612// CHECK: [ B1 ]
613// CHECK: 1: [B2.4].~A() (Implicit destructor)
Ted Kremenekd40066b2011-04-04 23:29:12 +0000614// CHECK: 2:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000615// CHECK: 3: A g;
616// CHECK: 4: [B1.3].~A() (Implicit destructor)
617// CHECK: 5: [B2.2].~A() (Implicit destructor)
618// CHECK: Predecessors (3): B3 B7 B2
619// CHECK: Successors (1): B0
620// CHECK: [ B2 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000621// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000622// CHECK: 2: A a;
623// CHECK: 3: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000624// CHECK: 4: A b = a;
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000625// CHECK: 5: b.operator int()
626// CHECK: T: switch [B2.5]
627// CHECK: Predecessors (1): B9
628// CHECK: Successors (3): B3 B8
629// CHECK: B1
630// CHECK: [ B3 ]
631// CHECK: case 1:
632// CHECK: T: break;
633// CHECK: Predecessors (2): B2 B4
634// CHECK: Successors (1): B1
635// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000636// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000637// CHECK: 2: A f;
638// CHECK: 3: [B4.2].~A() (Implicit destructor)
639// CHECK: 4: [B8.2].~A() (Implicit destructor)
640// CHECK: Predecessors (1): B6
641// CHECK: Successors (1): B3
642// CHECK: [ B5 ]
643// CHECK: 1: return;
644// CHECK: 2: [B8.2].~A() (Implicit destructor)
645// CHECK: 3: [B2.4].~A() (Implicit destructor)
646// CHECK: 4: [B2.2].~A() (Implicit destructor)
647// CHECK: Predecessors (1): B6
648// CHECK: Successors (1): B0
649// CHECK: [ B6 ]
650// CHECK: 1: UV
651// CHECK: T: if [B6.1]
652// CHECK: Predecessors (1): B8
653// CHECK: Successors (2): B5 B4
654// CHECK: [ B7 ]
655// CHECK: 1: [B8.2].~A() (Implicit destructor)
656// CHECK: T: break;
657// CHECK: Predecessors (1): B8
658// CHECK: Successors (1): B1
659// CHECK: [ B8 ]
660// CHECK: case 0:
Ted Kremenekd40066b2011-04-04 23:29:12 +0000661// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000662// CHECK: 2: A c;
663// CHECK: 3: UV
664// CHECK: T: if [B8.3]
665// CHECK: Predecessors (1): B2
666// CHECK: Successors (2): B7 B6
667// CHECK: [ B0 (EXIT) ]
668// CHECK: Predecessors (2): B1 B5
669// CHECK: Successors (0):
670// CHECK: [ B6 (ENTRY) ]
671// CHECK: Predecessors (0):
672// CHECK: Successors (1): B5
673// CHECK: [ B1 ]
674// CHECK: 1: [B2.2].~A() (Implicit destructor)
675// CHECK: 2: [B5.2].~A() (Implicit destructor)
676// CHECK: Predecessors (1): B2
677// CHECK: Successors (1): B0
678// CHECK: [ B2 ]
679// CHECK: 1: a
Ted Kremenekd40066b2011-04-04 23:29:12 +0000680// CHECK: 2: A b = a;
681// CHECK: 3: b.operator int()
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000682// CHECK: 4: [B2.3]
683// CHECK: T: for (...; [B2.4]; )
684// CHECK: Predecessors (2): B3 B5
685// CHECK: Successors (2): B4 B1
686// CHECK: [ B3 ]
687// CHECK: 1: [B2.2].~A() (Implicit destructor)
688// CHECK: Predecessors (1): B4
689// CHECK: Successors (1): B2
690// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000691// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000692// CHECK: 2: A c;
693// CHECK: 3: [B4.2].~A() (Implicit destructor)
694// CHECK: Predecessors (1): B2
695// CHECK: Successors (1): B3
696// CHECK: [ B5 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000697// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000698// CHECK: 2: A a;
699// CHECK: Predecessors (1): B6
700// CHECK: Successors (1): B2
701// CHECK: [ B0 (EXIT) ]
702// CHECK: Predecessors (1): B1
703// CHECK: Successors (0):
704// CHECK: [ B12 (ENTRY) ]
705// CHECK: Predecessors (0):
706// CHECK: Successors (1): B11
707// CHECK: [ B1 ]
708// CHECK: 1: [B2.2].~A() (Implicit destructor)
709// CHECK: 2: [B11.4].~A() (Implicit destructor)
Ted Kremenekd40066b2011-04-04 23:29:12 +0000710// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000711// CHECK: 4: A f;
712// CHECK: 5: [B1.4].~A() (Implicit destructor)
713// CHECK: 6: [B11.2].~A() (Implicit destructor)
714// CHECK: Predecessors (2): B9 B2
715// CHECK: Successors (1): B0
716// CHECK: [ B2 ]
717// CHECK: 1: b
Ted Kremenekd40066b2011-04-04 23:29:12 +0000718// CHECK: 2: A c = b;
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000719// CHECK: 3: c.operator int()
720// CHECK: 4: [B2.3]
721// CHECK: T: for (...; [B2.4]; )
722// CHECK: Predecessors (2): B3 B11
723// CHECK: Successors (2): B10 B1
724// CHECK: [ B3 ]
725// CHECK: 1: [B2.2].~A() (Implicit destructor)
726// CHECK: Predecessors (2): B4 B7
727// CHECK: Successors (1): B2
728// CHECK: [ B4 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000729// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000730// CHECK: 2: A e;
731// CHECK: 3: [B4.2].~A() (Implicit destructor)
732// CHECK: 4: [B10.2].~A() (Implicit destructor)
733// CHECK: Predecessors (1): B6
734// CHECK: Successors (1): B3
735// CHECK: [ B5 ]
736// CHECK: 1: return;
737// CHECK: 2: [B10.2].~A() (Implicit destructor)
738// CHECK: 3: [B2.2].~A() (Implicit destructor)
739// CHECK: 4: [B11.4].~A() (Implicit destructor)
740// CHECK: 5: [B11.2].~A() (Implicit destructor)
741// CHECK: Predecessors (1): B6
742// CHECK: Successors (1): B0
743// CHECK: [ B6 ]
744// CHECK: 1: UV
745// CHECK: T: if [B6.1]
746// CHECK: Predecessors (1): B8
747// CHECK: Successors (2): B5 B4
748// CHECK: [ B7 ]
749// CHECK: 1: [B10.2].~A() (Implicit destructor)
750// CHECK: T: continue;
751// CHECK: Predecessors (1): B8
752// CHECK: Successors (1): B3
753// CHECK: [ B8 ]
754// CHECK: 1: UV
755// CHECK: T: if [B8.1]
756// CHECK: Predecessors (1): B10
757// CHECK: Successors (2): B7 B6
758// CHECK: [ B9 ]
759// CHECK: 1: [B10.2].~A() (Implicit destructor)
760// CHECK: T: break;
761// CHECK: Predecessors (1): B10
762// CHECK: Successors (1): B1
763// CHECK: [ B10 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000764// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000765// CHECK: 2: A d;
766// CHECK: 3: UV
767// CHECK: T: if [B10.3]
768// CHECK: Predecessors (1): B2
769// CHECK: Successors (2): B9 B8
770// CHECK: [ B11 ]
Ted Kremenekd40066b2011-04-04 23:29:12 +0000771// CHECK: 1:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000772// CHECK: 2: A a;
Ted Kremenekd40066b2011-04-04 23:29:12 +0000773// CHECK: 3:
Zhongxing Xu81bc7d02010-11-01 06:46:05 +0000774// CHECK: 4: A b;
775// CHECK: Predecessors (1): B12
776// CHECK: Successors (1): B2
777// CHECK: [ B0 (EXIT) ]
778// CHECK: Predecessors (2): B1 B5
779// CHECK: Successors (0):
780// CHECK: [ B3 (ENTRY) ]
781// CHECK: Predecessors (0):
782// CHECK: Successors (1): B0
783// CHECK: [ B1 ]
784// CHECK: T: try ...
785// CHECK: Predecessors (0):
786// CHECK: Successors (2): B2 B0
787// CHECK: [ B2 ]
788// CHECK: catch (const A &e):
789// CHECK: Predecessors (1): B1
790// CHECK: Successors (1): B0
791// CHECK: [ B0 (EXIT) ]
792// CHECK: Predecessors (3): B2 B1 B3
793// CHECK: Successors (0):
794// CHECK: [ B3 (ENTRY) ]
795// CHECK: Predecessors (0):
796// CHECK: Successors (1): B0
797// CHECK: [ B1 ]
798// CHECK: T: try ...
799// CHECK: Predecessors (0):
800// CHECK: Successors (2): B2 B0
801// CHECK: [ B2 ]
802// CHECK: catch (A e):
803// CHECK: 1: .~A() (Implicit destructor)
804// CHECK: Predecessors (1): B1
805// CHECK: Successors (1): B0
806// CHECK: [ B0 (EXIT) ]
807// CHECK: Predecessors (3): B2 B1 B3
808// CHECK: Successors (0):
Ted Kremenekd40066b2011-04-04 23:29:12 +0000809