blob: 20804dbfaf808d9930b669d90948940e5120099b [file] [log] [blame]
Ted Kremenek337e4db2012-03-10 01:34:17 +00001// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors %s > %t 2>&1
2// RUN: FileCheck --input-file=%t %s
Marcin Swiderskifcb72ac2010-10-01 00:23:17 +00003// XPASS: *
4
5class A {
6public:
7 A() {}
8 ~A() {}
9 operator int() const { return 1; }
10};
11
12extern const bool UV;
13
14void test_const_ref() {
15 A a;
16 const A& b = a;
17 const A& c = A();
18}
19
Marcin Swiderskib1c52872010-10-25 07:00:40 +000020void test_array() {
21 A a[2];
22 A b[0];
23}
24
Marcin Swiderskifcb72ac2010-10-01 00:23:17 +000025void test_scope() {
26 A a;
27 { A c;
28 A d;
29 }
30 A b;
31}
32
33void test_return() {
34 A a;
35 A b;
36 if (UV) return;
37 A c;
38}
39
40void test_goto() {
41 A a;
42l0:
43 A b;
44 { A a;
45 if (UV) goto l0;
46 if (UV) goto l1;
47 A b;
48 }
49l1:
50 A c;
51}
52
Marcin Swiderski04e046c2010-10-01 00:52:17 +000053void test_if_implicit_scope() {
54 A a;
55 if (A b = a)
56 A c;
57 else A c;
58}
59
60void test_if_jumps() {
61 A a;
62 if (A b = a) {
63 A c;
64 if (UV) return;
65 A d;
66 } else {
67 A c;
68 if (UV) return;
69 A d;
70 }
71 A e;
72}
73
Marcin Swiderski05adedc2010-10-01 01:14:17 +000074void test_while_implicit_scope() {
75 A a;
76 while (A b = a)
77 A c;
78}
79
80void test_while_jumps() {
81 A a;
82 while (A b = a) {
83 A c;
84 if (UV) break;
85 if (UV) continue;
86 if (UV) return;
87 A d;
88 }
89 A e;
90}
91
92void test_do_implicit_scope() {
93 do A a;
94 while (UV);
95}
96
97void test_do_jumps() {
98 A a;
99 do {
100 A b;
101 if (UV) break;
102 if (UV) continue;
103 if (UV) return;
104 A c;
105 } while (UV);
106 A d;
107}
108
Marcin Swiderski8ae60582010-10-01 01:24:41 +0000109void test_switch_implicit_scope() {
110 A a;
111 switch (A b = a)
112 A c;
113}
114
115void test_switch_jumps() {
116 A a;
117 switch (A b = a) {
118 case 0: {
119 A c;
120 if (UV) break;
121 if (UV) return;
122 A f;
123 }
124 case 1:
125 break;
126 }
127 A g;
128}
129
Marcin Swiderski47575f12010-10-01 01:38:14 +0000130void test_for_implicit_scope() {
131 for (A a; A b = a; )
132 A c;
133}
134
135void test_for_jumps() {
136 A a;
137 for (A b; A c = b; ) {
138 A d;
139 if (UV) break;
140 if (UV) continue;
141 if (UV) return;
142 A e;
143 }
144 A f;
145}
146
Marcin Swiderski0e97bcb2010-10-01 01:46:52 +0000147void test_catch_const_ref() {
148 try {
149 } catch (const A& e) {
150 }
151}
152
153void test_catch_copy() {
154 try {
155 } catch (A e) {
156 }
157}
158
Ted Kremenek682060c2011-12-22 23:33:52 +0000159// CHECK: [B2 (ENTRY)]
160// CHECK: Succs (1): B1
161// CHECK: [B1]
162// CHECK: 1: (CXXConstructExpr, class A)
163// CHECK: 2: A a;
164// CHECK: 3: a
165// CHECK: 4: [B1.3] (ImplicitCastExpr, NoOp, const class A)
166// CHECK: 5: const A &b = a;
167// CHECK: 6: A() (CXXConstructExpr, class A)
168// CHECK: 7: [B1.6] (BindTemporary)
169// CHECK: 8: [B1.7] (ImplicitCastExpr, NoOp, const class A)
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: Preds (1): B2
175// CHECK: Succs (1): B0
176// CHECK: [B0 (EXIT)]
177// CHECK: Preds (1): B1
178// CHECK: [B2 (ENTRY)]
179// CHECK: Succs (1): B1
180// CHECK: [B1]
181// CHECK: 1: (CXXConstructExpr, class A [2])
182// CHECK: 2: A a[2];
183// CHECK: 3: (CXXConstructExpr, class A [0])
184// CHECK: 4: A b[0];
185// CHECK: 5: [B1.2].~A() (Implicit destructor)
186// CHECK: Preds (1): B2
187// CHECK: Succs (1): B0
188// CHECK: [B0 (EXIT)]
189// CHECK: Preds (1): B1
190// CHECK: [B2 (ENTRY)]
191// CHECK: Succs (1): B1
192// CHECK: [B1]
193// CHECK: 1: (CXXConstructExpr, class A)
194// CHECK: 2: A a;
195// CHECK: 3: (CXXConstructExpr, class A)
196// CHECK: 4: A c;
197// CHECK: 5: (CXXConstructExpr, class A)
198// CHECK: 6: A d;
199// CHECK: 7: [B1.6].~A() (Implicit destructor)
200// CHECK: 8: [B1.4].~A() (Implicit destructor)
201// CHECK: 9: (CXXConstructExpr, class A)
202// CHECK: 10: A b;
203// CHECK: 11: [B1.10].~A() (Implicit destructor)
204// CHECK: 12: [B1.2].~A() (Implicit destructor)
205// CHECK: Preds (1): B2
206// CHECK: Succs (1): B0
207// CHECK: [B0 (EXIT)]
208// CHECK: Preds (1): B1
209// CHECK: [B4 (ENTRY)]
210// CHECK: Succs (1): B3
211// CHECK: [B1]
212// CHECK: 1: (CXXConstructExpr, class A)
213// CHECK: 2: A c;
214// CHECK: 3: [B1.2].~A() (Implicit destructor)
215// CHECK: 4: [B3.4].~A() (Implicit destructor)
216// CHECK: 5: [B3.2].~A() (Implicit destructor)
217// CHECK: Preds (1): B3
218// CHECK: Succs (1): B0
219// CHECK: [B2]
220// CHECK: 1: return;
221// CHECK: 2: [B3.4].~A() (Implicit destructor)
222// CHECK: 3: [B3.2].~A() (Implicit destructor)
223// CHECK: Preds (1): B3
224// CHECK: Succs (1): B0
225// CHECK: [B3]
226// CHECK: 1: (CXXConstructExpr, class A)
227// CHECK: 2: A a;
228// CHECK: 3: (CXXConstructExpr, class A)
229// CHECK: 4: A b;
230// CHECK: 5: UV
231// CHECK: 6: [B3.5] (ImplicitCastExpr, LValueToRValue, _Bool)
232// CHECK: T: if [B3.6]
233// CHECK: Preds (1): B4
234// CHECK: Succs (2): B2 B1
235// CHECK: [B0 (EXIT)]
236// CHECK: Preds (2): B1 B2
237// CHECK: [B8 (ENTRY)]
238// CHECK: Succs (1): B7
239// CHECK: [B1]
240// CHECK: l1:
241// CHECK: 1: (CXXConstructExpr, class A)
242// CHECK: 2: A c;
243// CHECK: 3: [B1.2].~A() (Implicit destructor)
244// CHECK: 4: [B6.2].~A() (Implicit destructor)
245// CHECK: 5: [B7.2].~A() (Implicit destructor)
246// CHECK: Preds (2): B2 B3
247// CHECK: Succs (1): B0
248// CHECK: [B2]
249// CHECK: 1: (CXXConstructExpr, class A)
250// CHECK: 2: A b;
251// CHECK: 3: [B2.2].~A() (Implicit destructor)
252// CHECK: 4: [B6.4].~A() (Implicit destructor)
253// CHECK: Preds (1): B4
254// CHECK: Succs (1): B1
255// CHECK: [B3]
256// CHECK: 1: [B6.4].~A() (Implicit destructor)
257// CHECK: T: goto l1;
258// CHECK: Preds (1): B4
259// CHECK: Succs (1): B1
260// CHECK: [B4]
261// CHECK: 1: UV
262// CHECK: 2: [B4.1] (ImplicitCastExpr, LValueToRValue, _Bool)
263// CHECK: T: if [B4.2]
264// CHECK: Preds (1): B6
265// CHECK: Succs (2): B3 B2
266// CHECK: [B5]
267// CHECK: 1: [B6.4].~A() (Implicit destructor)
268// CHECK: 2: [B6.2].~A() (Implicit destructor)
269// CHECK: T: goto l0;
270// CHECK: Preds (1): B6
271// CHECK: Succs (1): B6
272// CHECK: [B6]
273// CHECK: l0:
274// CHECK: 1: (CXXConstructExpr, class A)
275// CHECK: 2: A b;
276// CHECK: 3: (CXXConstructExpr, class A)
277// CHECK: 4: A a;
278// CHECK: 5: UV
279// CHECK: 6: [B6.5] (ImplicitCastExpr, LValueToRValue, _Bool)
280// CHECK: T: if [B6.6]
281// CHECK: Preds (2): B7 B5
282// CHECK: Succs (2): B5 B4
283// CHECK: [B7]
284// CHECK: 1: (CXXConstructExpr, class A)
285// CHECK: 2: A a;
286// CHECK: Preds (1): B8
287// CHECK: Succs (1): B6
288// CHECK: [B0 (EXIT)]
289// CHECK: Preds (1): B1
290// CHECK: [B5 (ENTRY)]
291// CHECK: Succs (1): B4
292// CHECK: [B1]
293// CHECK: 1: [B4.6].~A() (Implicit destructor)
294// CHECK: 2: [B4.2].~A() (Implicit destructor)
295// CHECK: Preds (2): B2 B3
296// CHECK: Succs (1): B0
297// CHECK: [B2]
298// CHECK: 1: (CXXConstructExpr, class A)
299// CHECK: 2: A c;
300// CHECK: 3: [B2.2].~A() (Implicit destructor)
301// CHECK: Preds (1): B4
302// CHECK: Succs (1): B1
303// CHECK: [B3]
304// CHECK: 1: (CXXConstructExpr, class A)
305// CHECK: 2: A c;
306// CHECK: 3: [B3.2].~A() (Implicit destructor)
307// CHECK: Preds (1): B4
308// CHECK: Succs (1): B1
309// CHECK: [B4]
310// CHECK: 1: (CXXConstructExpr, class A)
311// CHECK: 2: A a;
312// CHECK: 3: a
313// CHECK: 4: [B4.3] (ImplicitCastExpr, NoOp, const class A)
314// CHECK: 5: [B4.4] (CXXConstructExpr, class A)
315// CHECK: 6: A b = a;
316// CHECK: 7: b
317// CHECK: 8: [B4.7] (ImplicitCastExpr, NoOp, const class A)
318// CHECK: 9: [B4.8].operator int
319// CHECK: 10: [B4.9]()
320// CHECK: 11: [B4.10] (ImplicitCastExpr, UserDefinedConversion, int)
321// CHECK: 12: [B4.11] (ImplicitCastExpr, IntegralToBoolean, _Bool)
322// CHECK: T: if [B4.12]
323// CHECK: Preds (1): B5
324// CHECK: Succs (2): B3 B2
325// CHECK: [B0 (EXIT)]
326// CHECK: Preds (1): B1
Ted Kremenek337e4db2012-03-10 01:34:17 +0000327// CHECK: [B2 (ENTRY)]
328// CHECK: Succs (1): B1
329// CHECK: [B1]
330// CHECK: 1: 1
331// CHECK: 2: return [B1.1];
332// CHECK: Preds (1): B2
333// CHECK: Succs (1): B0
334// CHECK: [B0 (EXIT)]
335// CHECK: Preds (1): B1
Ted Kremenek682060c2011-12-22 23:33:52 +0000336// CHECK: [B9 (ENTRY)]
337// CHECK: Succs (1): B8
338// CHECK: [B1]
339// CHECK: 1: [B8.6].~A() (Implicit destructor)
340// CHECK: 2: (CXXConstructExpr, class A)
341// CHECK: 3: A e;
342// CHECK: 4: [B1.3].~A() (Implicit destructor)
343// CHECK: 5: [B8.2].~A() (Implicit destructor)
344// CHECK: Preds (2): B2 B5
345// CHECK: Succs (1): B0
346// CHECK: [B2]
347// CHECK: 1: (CXXConstructExpr, class A)
348// CHECK: 2: A d;
349// CHECK: 3: [B2.2].~A() (Implicit destructor)
350// CHECK: 4: [B4.2].~A() (Implicit destructor)
351// CHECK: Preds (1): B4
352// CHECK: Succs (1): B1
353// CHECK: [B3]
354// CHECK: 1: return;
355// CHECK: 2: [B4.2].~A() (Implicit destructor)
356// CHECK: 3: [B8.6].~A() (Implicit destructor)
357// CHECK: 4: [B8.2].~A() (Implicit destructor)
358// CHECK: Preds (1): B4
359// CHECK: Succs (1): B0
360// CHECK: [B4]
361// CHECK: 1: (CXXConstructExpr, class A)
362// CHECK: 2: A c;
363// CHECK: 3: UV
364// CHECK: 4: [B4.3] (ImplicitCastExpr, LValueToRValue, _Bool)
365// CHECK: T: if [B4.4]
366// CHECK: Preds (1): B8
367// CHECK: Succs (2): B3 B2
368// CHECK: [B5]
369// CHECK: 1: (CXXConstructExpr, class A)
370// CHECK: 2: A d;
371// CHECK: 3: [B5.2].~A() (Implicit destructor)
372// CHECK: 4: [B7.2].~A() (Implicit destructor)
373// CHECK: Preds (1): B7
374// CHECK: Succs (1): B1
375// CHECK: [B6]
376// CHECK: 1: return;
377// CHECK: 2: [B7.2].~A() (Implicit destructor)
378// CHECK: 3: [B8.6].~A() (Implicit destructor)
379// CHECK: 4: [B8.2].~A() (Implicit destructor)
380// CHECK: Preds (1): B7
381// CHECK: Succs (1): B0
382// CHECK: [B7]
383// CHECK: 1: (CXXConstructExpr, class A)
384// CHECK: 2: A c;
385// CHECK: 3: UV
386// CHECK: 4: [B7.3] (ImplicitCastExpr, LValueToRValue, _Bool)
387// CHECK: T: if [B7.4]
388// CHECK: Preds (1): B8
389// CHECK: Succs (2): B6 B5
390// CHECK: [B8]
391// CHECK: 1: (CXXConstructExpr, class A)
392// CHECK: 2: A a;
393// CHECK: 3: a
394// CHECK: 4: [B8.3] (ImplicitCastExpr, NoOp, const class A)
395// CHECK: 5: [B8.4] (CXXConstructExpr, class A)
396// CHECK: 6: A b = a;
397// CHECK: 7: b
398// CHECK: 8: [B8.7] (ImplicitCastExpr, NoOp, const class A)
399// CHECK: 9: [B8.8].operator int
400// CHECK: 10: [B8.9]()
401// CHECK: 11: [B8.10] (ImplicitCastExpr, UserDefinedConversion, int)
402// CHECK: 12: [B8.11] (ImplicitCastExpr, IntegralToBoolean, _Bool)
403// CHECK: T: if [B8.12]
404// CHECK: Preds (1): B9
405// CHECK: Succs (2): B7 B4
406// CHECK: [B0 (EXIT)]
407// CHECK: Preds (3): B1 B3 B6
408// CHECK: [B6 (ENTRY)]
409// CHECK: Succs (1): B5
410// CHECK: [B1]
411// CHECK: 1: [B2.4].~A() (Implicit destructor)
412// CHECK: 2: [B5.2].~A() (Implicit destructor)
413// CHECK: Preds (1): B2
414// CHECK: Succs (1): B0
415// CHECK: [B2]
416// CHECK: 1: a
417// CHECK: 2: [B2.1] (ImplicitCastExpr, NoOp, const class A)
418// CHECK: 3: [B2.2] (CXXConstructExpr, class A)
419// CHECK: 4: A b = a;
420// CHECK: 5: b
421// CHECK: 6: [B2.5] (ImplicitCastExpr, NoOp, const class A)
422// CHECK: 7: [B2.6].operator int
423// CHECK: 8: [B2.7]()
424// CHECK: 9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, int)
425// CHECK: 10: [B2.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
426// CHECK: T: while [B2.10]
427// CHECK: Preds (2): B3 B5
428// CHECK: Succs (2): B4 B1
429// CHECK: [B3]
430// CHECK: Preds (1): B4
431// CHECK: Succs (1): B2
432// CHECK: [B4]
433// CHECK: 1: (CXXConstructExpr, class A)
434// CHECK: 2: A c;
435// CHECK: 3: [B4.2].~A() (Implicit destructor)
436// CHECK: 4: [B2.4].~A() (Implicit destructor)
437// CHECK: Preds (1): B2
438// CHECK: Succs (1): B3
439// CHECK: [B5]
440// CHECK: 1: (CXXConstructExpr, class A)
441// CHECK: 2: A a;
442// CHECK: Preds (1): B6
443// CHECK: Succs (1): B2
444// CHECK: [B0 (EXIT)]
445// CHECK: Preds (1): B1
446// CHECK: [B12 (ENTRY)]
447// CHECK: Succs (1): B11
448// CHECK: [B1]
449// CHECK: 1: [B2.4].~A() (Implicit destructor)
450// CHECK: 2: (CXXConstructExpr, class A)
451// CHECK: 3: A e;
452// CHECK: 4: [B1.3].~A() (Implicit destructor)
453// CHECK: 5: [B11.2].~A() (Implicit destructor)
454// CHECK: Preds (2): B9 B2
455// CHECK: Succs (1): B0
456// CHECK: [B2]
457// CHECK: 1: a
458// CHECK: 2: [B2.1] (ImplicitCastExpr, NoOp, const class A)
459// CHECK: 3: [B2.2] (CXXConstructExpr, class A)
460// CHECK: 4: A b = a;
461// CHECK: 5: b
462// CHECK: 6: [B2.5] (ImplicitCastExpr, NoOp, const class A)
463// CHECK: 7: [B2.6].operator int
464// CHECK: 8: [B2.7]()
465// CHECK: 9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, int)
466// CHECK: 10: [B2.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
467// CHECK: T: while [B2.10]
468// CHECK: Preds (2): B3 B11
469// CHECK: Succs (2): B10 B1
470// CHECK: [B3]
471// CHECK: Preds (2): B4 B7
472// CHECK: Succs (1): B2
473// CHECK: [B4]
474// CHECK: 1: (CXXConstructExpr, class A)
475// CHECK: 2: A d;
476// CHECK: 3: [B4.2].~A() (Implicit destructor)
477// CHECK: 4: [B10.2].~A() (Implicit destructor)
478// CHECK: 5: [B2.4].~A() (Implicit destructor)
479// CHECK: Preds (1): B6
480// CHECK: Succs (1): B3
481// CHECK: [B5]
482// CHECK: 1: return;
483// CHECK: 2: [B10.2].~A() (Implicit destructor)
484// CHECK: 3: [B2.4].~A() (Implicit destructor)
485// CHECK: 4: [B11.2].~A() (Implicit destructor)
486// CHECK: Preds (1): B6
487// CHECK: Succs (1): B0
488// CHECK: [B6]
489// CHECK: 1: UV
490// CHECK: 2: [B6.1] (ImplicitCastExpr, LValueToRValue, _Bool)
491// CHECK: T: if [B6.2]
492// CHECK: Preds (1): B8
493// CHECK: Succs (2): B5 B4
494// CHECK: [B7]
495// CHECK: 1: [B10.2].~A() (Implicit destructor)
496// CHECK: 2: [B2.4].~A() (Implicit destructor)
497// CHECK: T: continue;
498// CHECK: Preds (1): B8
499// CHECK: Succs (1): B3
500// CHECK: [B8]
501// CHECK: 1: UV
502// CHECK: 2: [B8.1] (ImplicitCastExpr, LValueToRValue, _Bool)
503// CHECK: T: if [B8.2]
504// CHECK: Preds (1): B10
505// CHECK: Succs (2): B7 B6
506// CHECK: [B9]
507// CHECK: 1: [B10.2].~A() (Implicit destructor)
508// CHECK: T: break;
509// CHECK: Preds (1): B10
510// CHECK: Succs (1): B1
511// CHECK: [B10]
512// CHECK: 1: (CXXConstructExpr, class A)
513// CHECK: 2: A c;
514// CHECK: 3: UV
515// CHECK: 4: [B10.3] (ImplicitCastExpr, LValueToRValue, _Bool)
516// CHECK: T: if [B10.4]
517// CHECK: Preds (1): B2
518// CHECK: Succs (2): B9 B8
519// CHECK: [B11]
520// CHECK: 1: (CXXConstructExpr, class A)
521// CHECK: 2: A a;
522// CHECK: Preds (1): B12
523// CHECK: Succs (1): B2
524// CHECK: [B0 (EXIT)]
525// CHECK: Preds (2): B1 B5
526// CHECK: [B4 (ENTRY)]
527// CHECK: Succs (1): B2
528// CHECK: [B1]
529// CHECK: 1: UV
530// CHECK: 2: [B1.1] (ImplicitCastExpr, LValueToRValue, _Bool)
531// CHECK: T: do ... while [B1.2]
532// CHECK: Preds (1): B2
533// CHECK: Succs (2): B3 B0
534// CHECK: [B2]
535// CHECK: 1: (CXXConstructExpr, class A)
536// CHECK: 2: A a;
537// CHECK: 3: [B2.2].~A() (Implicit destructor)
538// CHECK: Preds (2): B3 B4
539// CHECK: Succs (1): B1
540// CHECK: [B3]
541// CHECK: Preds (1): B1
542// CHECK: Succs (1): B2
543// CHECK: [B0 (EXIT)]
544// CHECK: Preds (1): B1
545// CHECK: [B12 (ENTRY)]
546// CHECK: Succs (1): B11
547// CHECK: [B1]
548// CHECK: 1: (CXXConstructExpr, class A)
549// CHECK: 2: A d;
550// CHECK: 3: [B1.2].~A() (Implicit destructor)
551// CHECK: 4: [B11.2].~A() (Implicit destructor)
552// CHECK: Preds (2): B8 B2
553// CHECK: Succs (1): B0
554// CHECK: [B2]
555// CHECK: 1: UV
556// CHECK: 2: [B2.1] (ImplicitCastExpr, LValueToRValue, _Bool)
557// CHECK: T: do ... while [B2.2]
558// CHECK: Preds (2): B3 B6
559// CHECK: Succs (2): B10 B1
560// CHECK: [B3]
561// CHECK: 1: (CXXConstructExpr, class A)
562// CHECK: 2: A c;
563// CHECK: 3: [B3.2].~A() (Implicit destructor)
564// CHECK: 4: [B9.2].~A() (Implicit destructor)
565// CHECK: Preds (1): B5
566// CHECK: Succs (1): B2
567// CHECK: [B4]
568// CHECK: 1: return;
569// CHECK: 2: [B9.2].~A() (Implicit destructor)
570// CHECK: 3: [B11.2].~A() (Implicit destructor)
571// CHECK: Preds (1): B5
572// CHECK: Succs (1): B0
573// CHECK: [B5]
574// CHECK: 1: UV
575// CHECK: 2: [B5.1] (ImplicitCastExpr, LValueToRValue, _Bool)
576// CHECK: T: if [B5.2]
577// CHECK: Preds (1): B7
578// CHECK: Succs (2): B4 B3
579// CHECK: [B6]
580// CHECK: 1: [B9.2].~A() (Implicit destructor)
581// CHECK: T: continue;
582// CHECK: Preds (1): B7
583// CHECK: Succs (1): B2
584// CHECK: [B7]
585// CHECK: 1: UV
586// CHECK: 2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
587// CHECK: T: if [B7.2]
588// CHECK: Preds (1): B9
589// CHECK: Succs (2): B6 B5
590// CHECK: [B8]
591// CHECK: 1: [B9.2].~A() (Implicit destructor)
592// CHECK: T: break;
593// CHECK: Preds (1): B9
594// CHECK: Succs (1): B1
595// CHECK: [B9]
596// CHECK: 1: (CXXConstructExpr, class A)
597// CHECK: 2: A b;
598// CHECK: 3: UV
599// CHECK: 4: [B9.3] (ImplicitCastExpr, LValueToRValue, _Bool)
600// CHECK: T: if [B9.4]
601// CHECK: Preds (2): B10 B11
602// CHECK: Succs (2): B8 B7
603// CHECK: [B10]
604// CHECK: Preds (1): B2
605// CHECK: Succs (1): B9
606// CHECK: [B11]
607// CHECK: 1: (CXXConstructExpr, class A)
608// CHECK: 2: A a;
609// CHECK: Preds (1): B12
610// CHECK: Succs (1): B9
611// CHECK: [B0 (EXIT)]
612// CHECK: Preds (2): B1 B4
613// CHECK: [B4 (ENTRY)]
614// CHECK: Succs (1): B2
615// CHECK: [B1]
616// CHECK: 1: [B2.6].~A() (Implicit destructor)
617// CHECK: 2: [B2.2].~A() (Implicit destructor)
618// CHECK: Preds (2): B3 B2
619// CHECK: Succs (1): B0
620// CHECK: [B2]
621// CHECK: 1: (CXXConstructExpr, class A)
622// CHECK: 2: A a;
623// CHECK: 3: a
624// CHECK: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A)
625// CHECK: 5: [B2.4] (CXXConstructExpr, class A)
626// CHECK: 6: A b = a;
627// CHECK: 7: b
628// CHECK: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
629// CHECK: 9: [B2.8].operator int
630// CHECK: 10: [B2.9]()
631// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int)
632// CHECK: T: switch [B2.11]
633// CHECK: Preds (1): B4
634// CHECK: Succs (1): B1
635// CHECK: [B3]
636// CHECK: 1: (CXXConstructExpr, class A)
637// CHECK: 2: A c;
638// CHECK: 3: [B3.2].~A() (Implicit destructor)
639// CHECK: Succs (1): B1
640// CHECK: [B0 (EXIT)]
641// CHECK: Preds (1): B1
642// CHECK: [B9 (ENTRY)]
643// CHECK: Succs (1): B2
644// CHECK: [B1]
645// CHECK: 1: [B2.6].~A() (Implicit destructor)
646// CHECK: 2: (CXXConstructExpr, class A)
647// CHECK: 3: A g;
648// CHECK: 4: [B1.3].~A() (Implicit destructor)
649// CHECK: 5: [B2.2].~A() (Implicit destructor)
650// CHECK: Preds (3): B3 B7 B2
651// CHECK: Succs (1): B0
652// CHECK: [B2]
653// CHECK: 1: (CXXConstructExpr, class A)
654// CHECK: 2: A a;
655// CHECK: 3: a
656// CHECK: 4: [B2.3] (ImplicitCastExpr, NoOp, const class A)
657// CHECK: 5: [B2.4] (CXXConstructExpr, class A)
658// CHECK: 6: A b = a;
659// CHECK: 7: b
660// CHECK: 8: [B2.7] (ImplicitCastExpr, NoOp, const class A)
661// CHECK: 9: [B2.8].operator int
662// CHECK: 10: [B2.9]()
663// CHECK: 11: [B2.10] (ImplicitCastExpr, UserDefinedConversion, int)
664// CHECK: T: switch [B2.11]
665// CHECK: Preds (1): B9
666// CHECK: Succs (3): B3 B8
Ted Kremenek88299892011-07-28 23:07:59 +0000667// CHECK: B1
Ted Kremenek682060c2011-12-22 23:33:52 +0000668// CHECK: [B3]
669// CHECK: case 1:
670// CHECK: T: break;
671// CHECK: Preds (2): B2 B4
672// CHECK: Succs (1): B1
673// CHECK: [B4]
674// CHECK: 1: (CXXConstructExpr, class A)
675// CHECK: 2: A f;
676// CHECK: 3: [B4.2].~A() (Implicit destructor)
677// CHECK: 4: [B8.2].~A() (Implicit destructor)
678// CHECK: Preds (1): B6
679// CHECK: Succs (1): B3
680// CHECK: [B5]
681// CHECK: 1: return;
682// CHECK: 2: [B8.2].~A() (Implicit destructor)
683// CHECK: 3: [B2.6].~A() (Implicit destructor)
684// CHECK: 4: [B2.2].~A() (Implicit destructor)
685// CHECK: Preds (1): B6
686// CHECK: Succs (1): B0
687// CHECK: [B6]
688// CHECK: 1: UV
689// CHECK: 2: [B6.1] (ImplicitCastExpr, LValueToRValue, _Bool)
690// CHECK: T: if [B6.2]
691// CHECK: Preds (1): B8
692// CHECK: Succs (2): B5 B4
693// CHECK: [B7]
694// CHECK: 1: [B8.2].~A() (Implicit destructor)
695// CHECK: T: break;
696// CHECK: Preds (1): B8
697// CHECK: Succs (1): B1
698// CHECK: [B8]
699// CHECK: case 0:
700// CHECK: 1: (CXXConstructExpr, class A)
701// CHECK: 2: A c;
702// CHECK: 3: UV
703// CHECK: 4: [B8.3] (ImplicitCastExpr, LValueToRValue, _Bool)
704// CHECK: T: if [B8.4]
705// CHECK: Preds (1): B2
706// CHECK: Succs (2): B7 B6
707// CHECK: [B0 (EXIT)]
708// CHECK: Preds (2): B1 B5
709// CHECK: [B6 (ENTRY)]
710// CHECK: Succs (1): B5
711// CHECK: [B1]
712// CHECK: 1: [B2.4].~A() (Implicit destructor)
713// CHECK: 2: [B5.2].~A() (Implicit destructor)
714// CHECK: Preds (1): B2
715// CHECK: Succs (1): B0
716// CHECK: [B2]
717// CHECK: 1: a
718// CHECK: 2: [B2.1] (ImplicitCastExpr, NoOp, const class A)
719// CHECK: 3: [B2.2] (CXXConstructExpr, class A)
720// CHECK: 4: A b = a;
721// CHECK: 5: b
722// CHECK: 6: [B2.5] (ImplicitCastExpr, NoOp, const class A)
723// CHECK: 7: [B2.6].operator int
724// CHECK: 8: [B2.7]()
725// CHECK: 9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, int)
726// CHECK: 10: [B2.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
727// CHECK: T: for (...; [B2.10]; )
728// CHECK: Preds (2): B3 B5
729// CHECK: Succs (2): B4 B1
730// CHECK: [B3]
731// CHECK: 1: [B2.4].~A() (Implicit destructor)
732// CHECK: Preds (1): B4
733// CHECK: Succs (1): B2
734// CHECK: [B4]
735// CHECK: 1: (CXXConstructExpr, class A)
736// CHECK: 2: A c;
737// CHECK: 3: [B4.2].~A() (Implicit destructor)
738// CHECK: Preds (1): B2
739// CHECK: Succs (1): B3
740// CHECK: [B5]
741// CHECK: 1: (CXXConstructExpr, class A)
742// CHECK: 2: A a;
743// CHECK: Preds (1): B6
744// CHECK: Succs (1): B2
745// CHECK: [B0 (EXIT)]
746// CHECK: Preds (1): B1
747// CHECK: [B12 (ENTRY)]
748// CHECK: Succs (1): B11
749// CHECK: [B1]
750// CHECK: 1: [B2.4].~A() (Implicit destructor)
751// CHECK: 2: [B11.4].~A() (Implicit destructor)
752// CHECK: 3: (CXXConstructExpr, class A)
753// CHECK: 4: A f;
754// CHECK: 5: [B1.4].~A() (Implicit destructor)
755// CHECK: 6: [B11.2].~A() (Implicit destructor)
756// CHECK: Preds (2): B9 B2
757// CHECK: Succs (1): B0
758// CHECK: [B2]
759// CHECK: 1: b
760// CHECK: 2: [B2.1] (ImplicitCastExpr, NoOp, const class A)
761// CHECK: 3: [B2.2] (CXXConstructExpr, class A)
762// CHECK: 4: A c = b;
763// CHECK: 5: c
764// CHECK: 6: [B2.5] (ImplicitCastExpr, NoOp, const class A)
765// CHECK: 7: [B2.6].operator int
766// CHECK: 8: [B2.7]()
767// CHECK: 9: [B2.8] (ImplicitCastExpr, UserDefinedConversion, int)
768// CHECK: 10: [B2.9] (ImplicitCastExpr, IntegralToBoolean, _Bool)
769// CHECK: T: for (...; [B2.10]; )
770// CHECK: Preds (2): B3 B11
771// CHECK: Succs (2): B10 B1
772// CHECK: [B3]
773// CHECK: 1: [B2.4].~A() (Implicit destructor)
774// CHECK: Preds (2): B4 B7
775// CHECK: Succs (1): B2
776// CHECK: [B4]
777// CHECK: 1: (CXXConstructExpr, class A)
778// CHECK: 2: A e;
779// CHECK: 3: [B4.2].~A() (Implicit destructor)
780// CHECK: 4: [B10.2].~A() (Implicit destructor)
781// CHECK: Preds (1): B6
782// CHECK: Succs (1): B3
783// CHECK: [B5]
784// CHECK: 1: return;
785// CHECK: 2: [B10.2].~A() (Implicit destructor)
786// CHECK: 3: [B2.4].~A() (Implicit destructor)
787// CHECK: 4: [B11.4].~A() (Implicit destructor)
788// CHECK: 5: [B11.2].~A() (Implicit destructor)
789// CHECK: Preds (1): B6
790// CHECK: Succs (1): B0
791// CHECK: [B6]
792// CHECK: 1: UV
793// CHECK: 2: [B6.1] (ImplicitCastExpr, LValueToRValue, _Bool)
794// CHECK: T: if [B6.2]
795// CHECK: Preds (1): B8
796// CHECK: Succs (2): B5 B4
797// CHECK: [B7]
798// CHECK: 1: [B10.2].~A() (Implicit destructor)
799// CHECK: T: continue;
800// CHECK: Preds (1): B8
801// CHECK: Succs (1): B3
802// CHECK: [B8]
803// CHECK: 1: UV
804// CHECK: 2: [B8.1] (ImplicitCastExpr, LValueToRValue, _Bool)
805// CHECK: T: if [B8.2]
806// CHECK: Preds (1): B10
807// CHECK: Succs (2): B7 B6
808// CHECK: [B9]
809// CHECK: 1: [B10.2].~A() (Implicit destructor)
810// CHECK: T: break;
811// CHECK: Preds (1): B10
812// CHECK: Succs (1): B1
813// CHECK: [B10]
814// CHECK: 1: (CXXConstructExpr, class A)
815// CHECK: 2: A d;
816// CHECK: 3: UV
817// CHECK: 4: [B10.3] (ImplicitCastExpr, LValueToRValue, _Bool)
818// CHECK: T: if [B10.4]
819// CHECK: Preds (1): B2
820// CHECK: Succs (2): B9 B8
821// CHECK: [B11]
822// CHECK: 1: (CXXConstructExpr, class A)
823// CHECK: 2: A a;
824// CHECK: 3: (CXXConstructExpr, class A)
825// CHECK: 4: A b;
826// CHECK: Preds (1): B12
827// CHECK: Succs (1): B2
828// CHECK: [B0 (EXIT)]
829// CHECK: Preds (2): B1 B5
830// CHECK: [B3 (ENTRY)]
831// CHECK: Succs (1): B0
832// CHECK: [B1]
833// CHECK: T: try ...
834// CHECK: Succs (2): B2 B0
835// CHECK: [B2]
836// CHECK: catch (const A &e):
Ted Kremenek337e4db2012-03-10 01:34:17 +0000837// CHECK: 1: catch (const A &e) {
838// CHECK: }
Ted Kremenek682060c2011-12-22 23:33:52 +0000839// CHECK: Preds (1): B1
840// CHECK: Succs (1): B0
841// CHECK: [B0 (EXIT)]
842// CHECK: Preds (3): B2 B1 B3
843// CHECK: [B3 (ENTRY)]
844// CHECK: Succs (1): B0
845// CHECK: [B1]
846// CHECK: T: try ...
847// CHECK: Succs (2): B2 B0
848// CHECK: [B2]
849// CHECK: catch (A e):
Ted Kremenek337e4db2012-03-10 01:34:17 +0000850// CHECK: 1: catch (A e) {
851// CHECK: }
852// CHECK: 2: [B2.1].~A() (Implicit destructor)
Ted Kremenek682060c2011-12-22 23:33:52 +0000853// CHECK: Preds (1): B1
854// CHECK: Succs (1): B0
855// CHECK: [B0 (EXIT)]
856// CHECK: Preds (3): B2 B1 B3