blob: d3b467bf4f7df42404fc33c25f51f615245f1396 [file] [log] [blame]
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors -cfg-add-initializers %s 2>&1 | FileCheck %s
Marcin Swiderski8599e762010-11-03 06:19:35 +00002// XPASS: *
3
4class A {
5public:
6 A() {}
7 ~A() {}
8
9 static A make() { return A(); }
10
11 operator bool() { return false; }
12 operator int() { return 0; }
13};
14
15class B {
16public:
17 B() {}
18 ~B() {}
19
20 operator bool() { return true; }
21 operator int() { return 1; }
22 operator A() { return A(); }
23};
24
25void foo(int);
26void foo(bool);
27void foo(const A&);
28
29void test_binary() {
30 int a = int(A()) + int(B());
31 foo(int(A()) + int(B()));
32 int b;
33}
34
35void test_and() {
36 bool a = A() && B();
37 foo(A() && B());
38 int b;
39}
40
41void test_or() {
42 bool a = A() || B();
43 foo(A() || B());
44 int b;
45}
46
47void test_cond() {
48 A a = B() ? A() : A(B());
49 if (B()) { foo(0); } else { foo(0); }
50 int b;
51}
52
53void test_cond_cref() {
54 const A& a = B() ? A() : A(B());
55 foo(B() ? A() : A(B()));
56 int b;
57}
58
59void test_cond_implicit() {
60 A a = A() ?: A();
61 int b;
62}
63
64void test_cond_implicit_cref() {
65 const A& a = A() ?: A();
66 foo(A() ?: A());
67 int b;
68}
69
70void test_copy_init() {
71 A a = A();
72 int b;
73}
74
75void test_cref_init() {
76 const A& a = A();
77 foo(A());
78 int b;
79}
80
81void test_call_copy_init() {
82 A a = A::make();
83 int b;
84}
85
86void test_call_cref_init() {
87 const A& a = A::make();
88 foo(A::make());
89 int b;
90}
91
92void test_assign() {
93 int a;
94 a = A();
95 int b;
96}
97
98class TestCtorInits {
99 int a;
100 int b;
101public:
102 TestCtorInits();
103};
104
105TestCtorInits::TestCtorInits()
106 : a(int(A()) + int(B()))
107 , b() {}
108
Ted Kremenek88299892011-07-28 23:07:59 +0000109// CHECK: [ B2 (ENTRY) ]
110// CHECK: Predecessors (0):
111// CHECK: Successors (1): B1
112// CHECK: [ B1 ]
113// CHECK: 1: A()
114// CHECK: 2: [B1.1] (BindTemporary)
115// CHECK: 3: [B1.2].operator int
116// CHECK: 4: [B1.3]()
117// CHECK: 5: [B1.4]
118// CHECK: 6: int([B1.5])
119// CHECK: 7: B()
120// CHECK: 8: [B1.7] (BindTemporary)
121// CHECK: 9: [B1.8].operator int
122// CHECK: 10: [B1.9]()
123// CHECK: 11: [B1.10]
124// CHECK: 12: int([B1.11])
125// CHECK: 13: [B1.6] + [B1.12]
126// CHECK: 14: int a = int(A().operator int()) + int(B().operator int());
127// CHECK: 15: ~B() (Temporary object destructor)
128// CHECK: 16: ~A() (Temporary object destructor)
129// CHECK: 17: A()
130// CHECK: 18: [B1.17] (BindTemporary)
131// CHECK: 19: [B1.18].operator int
132// CHECK: 20: [B1.19]()
133// CHECK: 21: [B1.20]
134// CHECK: 22: int([B1.21])
135// CHECK: 23: B()
136// CHECK: 24: [B1.23] (BindTemporary)
137// CHECK: 25: [B1.24].operator int
138// CHECK: 26: [B1.25]()
139// CHECK: 27: [B1.26]
140// CHECK: 28: int([B1.27])
141// CHECK: 29: [B1.22] + [B1.28]
142// CHECK: 30: foo
143// CHECK: 31: [B1.30]
144// CHECK: 32: [B1.31]([B1.29])
145// CHECK: 33: ~B() (Temporary object destructor)
146// CHECK: 34: ~A() (Temporary object destructor)
147// CHECK: 35: int b;
148// CHECK: Predecessors (1): B2
149// CHECK: Successors (1): B0
150// CHECK: [ B0 (EXIT) ]
151// CHECK: Predecessors (1): B1
152// CHECK: Successors (0):
153// CHECK: [ B10 (ENTRY) ]
154// CHECK: Predecessors (0):
155// CHECK: Successors (1): B8
156// CHECK: [ B1 ]
157// CHECK: 1: ~A() (Temporary object destructor)
158// CHECK: 2: int b;
159// CHECK: Predecessors (2): B2 B3
160// CHECK: Successors (1): B0
161// CHECK: [ B2 ]
162// CHECK: 1: ~B() (Temporary object destructor)
163// CHECK: Predecessors (1): B3
164// CHECK: Successors (1): B1
165// CHECK: [ B3 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000166// CHECK: 1: [B4.6] && [B5.5]
Ted Kremenek88299892011-07-28 23:07:59 +0000167// CHECK: 2: foo
168// CHECK: 3: [B3.2]
169// CHECK: 4: [B3.3]([B3.1])
Abramo Bagnara960809e2011-11-16 22:46:05 +0000170// CHECK: T: [B4.6] && ...
Ted Kremenek88299892011-07-28 23:07:59 +0000171// CHECK: Predecessors (2): B5 B4
172// CHECK: Successors (2): B2 B1
173// CHECK: [ B4 ]
174// CHECK: 1: ~A() (Temporary object destructor)
175// CHECK: 2: A()
176// CHECK: 3: [B4.2] (BindTemporary)
177// CHECK: 4: [B4.3].operator _Bool
178// CHECK: 5: [B4.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000179// CHECK: 6: [B4.5]
180// CHECK: T: [B4.6] && ...
Ted Kremenek88299892011-07-28 23:07:59 +0000181// CHECK: Predecessors (2): B6 B7
182// CHECK: Successors (2): B5 B3
183// CHECK: [ B5 ]
184// CHECK: 1: B()
185// CHECK: 2: [B5.1] (BindTemporary)
186// CHECK: 3: [B5.2].operator _Bool
187// CHECK: 4: [B5.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000188// CHECK: 5: [B5.4]
Ted Kremenek88299892011-07-28 23:07:59 +0000189// CHECK: Predecessors (1): B4
190// CHECK: Successors (1): B3
191// CHECK: [ B6 ]
192// CHECK: 1: ~B() (Temporary object destructor)
193// CHECK: Predecessors (1): B7
194// CHECK: Successors (1): B4
195// CHECK: [ B7 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000196// CHECK: 1: [B8.5] && [B9.5]
Ted Kremenek88299892011-07-28 23:07:59 +0000197// CHECK: 2: bool a = A().operator _Bool() && B().operator _Bool();
Abramo Bagnara960809e2011-11-16 22:46:05 +0000198// CHECK: T: [B8.5] && ...
Ted Kremenek88299892011-07-28 23:07:59 +0000199// CHECK: Predecessors (2): B9 B8
200// CHECK: Successors (2): B6 B4
201// CHECK: [ B8 ]
202// CHECK: 1: A()
203// CHECK: 2: [B8.1] (BindTemporary)
204// CHECK: 3: [B8.2].operator _Bool
205// CHECK: 4: [B8.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000206// CHECK: 5: [B8.4]
207// CHECK: T: [B8.5] && ...
Ted Kremenek88299892011-07-28 23:07:59 +0000208// CHECK: Predecessors (1): B10
209// CHECK: Successors (2): B9 B7
210// CHECK: [ B9 ]
211// CHECK: 1: B()
212// CHECK: 2: [B9.1] (BindTemporary)
213// CHECK: 3: [B9.2].operator _Bool
214// CHECK: 4: [B9.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000215// CHECK: 5: [B9.4]
Ted Kremenek88299892011-07-28 23:07:59 +0000216// CHECK: Predecessors (1): B8
217// CHECK: Successors (1): B7
218// CHECK: [ B0 (EXIT) ]
219// CHECK: Predecessors (1): B1
220// CHECK: Successors (0):
221// CHECK: [ B10 (ENTRY) ]
222// CHECK: Predecessors (0):
223// CHECK: Successors (1): B8
224// CHECK: [ B1 ]
225// CHECK: 1: ~A() (Temporary object destructor)
226// CHECK: 2: int b;
227// CHECK: Predecessors (2): B2 B3
228// CHECK: Successors (1): B0
229// CHECK: [ B2 ]
230// CHECK: 1: ~B() (Temporary object destructor)
231// CHECK: Predecessors (1): B3
232// CHECK: Successors (1): B1
233// CHECK: [ B3 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000234// CHECK: 1: [B4.6] || [B5.5]
Ted Kremenek88299892011-07-28 23:07:59 +0000235// CHECK: 2: foo
236// CHECK: 3: [B3.2]
237// CHECK: 4: [B3.3]([B3.1])
Abramo Bagnara960809e2011-11-16 22:46:05 +0000238// CHECK: T: [B4.6] || ...
Ted Kremenek88299892011-07-28 23:07:59 +0000239// CHECK: Predecessors (2): B5 B4
240// CHECK: Successors (2): B1 B2
241// CHECK: [ B4 ]
242// CHECK: 1: ~A() (Temporary object destructor)
243// CHECK: 2: A()
244// CHECK: 3: [B4.2] (BindTemporary)
245// CHECK: 4: [B4.3].operator _Bool
246// CHECK: 5: [B4.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000247// CHECK: 6: [B4.5]
248// CHECK: T: [B4.6] || ...
Ted Kremenek88299892011-07-28 23:07:59 +0000249// CHECK: Predecessors (2): B6 B7
250// CHECK: Successors (2): B3 B5
251// CHECK: [ B5 ]
252// CHECK: 1: B()
253// CHECK: 2: [B5.1] (BindTemporary)
254// CHECK: 3: [B5.2].operator _Bool
255// CHECK: 4: [B5.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000256// CHECK: 5: [B5.4]
Ted Kremenek88299892011-07-28 23:07:59 +0000257// CHECK: Predecessors (1): B4
258// CHECK: Successors (1): B3
259// CHECK: [ B6 ]
260// CHECK: 1: ~B() (Temporary object destructor)
261// CHECK: Predecessors (1): B7
262// CHECK: Successors (1): B4
263// CHECK: [ B7 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000264// CHECK: 1: [B8.5] || [B9.5]
Ted Kremenek88299892011-07-28 23:07:59 +0000265// CHECK: 2: bool a = A().operator _Bool() || B().operator _Bool();
Abramo Bagnara960809e2011-11-16 22:46:05 +0000266// CHECK: T: [B8.5] || ...
Ted Kremenek88299892011-07-28 23:07:59 +0000267// CHECK: Predecessors (2): B9 B8
268// CHECK: Successors (2): B4 B6
269// CHECK: [ B8 ]
270// CHECK: 1: A()
271// CHECK: 2: [B8.1] (BindTemporary)
272// CHECK: 3: [B8.2].operator _Bool
273// CHECK: 4: [B8.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000274// CHECK: 5: [B8.4]
275// CHECK: T: [B8.5] || ...
Ted Kremenek88299892011-07-28 23:07:59 +0000276// CHECK: Predecessors (1): B10
277// CHECK: Successors (2): B7 B9
278// CHECK: [ B9 ]
279// CHECK: 1: B()
280// CHECK: 2: [B9.1] (BindTemporary)
281// CHECK: 3: [B9.2].operator _Bool
282// CHECK: 4: [B9.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000283// CHECK: 5: [B9.4]
Ted Kremenek88299892011-07-28 23:07:59 +0000284// CHECK: Predecessors (1): B8
285// CHECK: Successors (1): B7
286// CHECK: [ B0 (EXIT) ]
287// CHECK: Predecessors (1): B1
288// CHECK: Successors (0):
289// CHECK: [ B11 (ENTRY) ]
290// CHECK: Predecessors (0):
291// CHECK: Successors (1): B10
292// CHECK: [ B1 ]
293// CHECK: 1: int b;
294// CHECK: 2: [B7.4].~A() (Implicit destructor)
295// CHECK: Predecessors (2): B2 B3
296// CHECK: Successors (1): B0
297// CHECK: [ B2 ]
298// CHECK: 1: 0
299// CHECK: 2: foo
300// CHECK: 3: [B2.2]
301// CHECK: 4: [B2.3]([B2.1])
302// CHECK: Predecessors (1): B4
303// CHECK: Successors (1): B1
304// CHECK: [ B3 ]
305// CHECK: 1: 0
306// CHECK: 2: foo
307// CHECK: 3: [B3.2]
308// CHECK: 4: [B3.3]([B3.1])
309// CHECK: Predecessors (1): B4
310// CHECK: Successors (1): B1
311// CHECK: [ B4 ]
312// CHECK: 1: ~B() (Temporary object destructor)
313// CHECK: 2: B()
314// CHECK: 3: [B4.2] (BindTemporary)
315// CHECK: 4: [B4.3].operator _Bool
316// CHECK: 5: [B4.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000317// CHECK: 6: [B4.5]
318// CHECK: 7: ~B() (Temporary object destructor)
319// CHECK: T: if [B4.6]
Ted Kremenek88299892011-07-28 23:07:59 +0000320// CHECK: Predecessors (2): B5 B6
321// CHECK: Successors (2): B3 B2
322// CHECK: [ B5 ]
323// CHECK: 1: ~A() (Temporary object destructor)
324// CHECK: 2: ~A() (Temporary object destructor)
325// CHECK: Predecessors (1): B7
326// CHECK: Successors (1): B4
327// CHECK: [ B6 ]
328// CHECK: 1: ~A() (Temporary object destructor)
329// CHECK: 2: ~A() (Temporary object destructor)
330// CHECK: 3: ~A() (Temporary object destructor)
331// CHECK: 4: ~B() (Temporary object destructor)
332// CHECK: Predecessors (1): B7
333// CHECK: Successors (1): B4
334// CHECK: [ B7 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000335// CHECK: 1: [B10.5] ? [B8.5] : [B9.13]
Ted Kremenek88299892011-07-28 23:07:59 +0000336// CHECK: 2: [B7.1]
337// CHECK: 3: [B7.2]
338// CHECK: 4: A a = B().operator _Bool() ? A() : A(B().operator A());
Abramo Bagnara960809e2011-11-16 22:46:05 +0000339// CHECK: T: [B10.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000340// CHECK: Predecessors (2): B8 B9
341// CHECK: Successors (2): B5 B6
342// CHECK: [ B8 ]
343// CHECK: 1: A()
344// CHECK: 2: [B8.1] (BindTemporary)
345// CHECK: 3: [B8.2]
346// CHECK: 4: [B8.3]
347// CHECK: 5: [B8.4] (BindTemporary)
348// CHECK: Predecessors (1): B10
349// CHECK: Successors (1): B7
350// CHECK: [ B9 ]
351// CHECK: 1: B()
352// CHECK: 2: [B9.1] (BindTemporary)
353// CHECK: 3: [B9.2].operator A
354// CHECK: 4: [B9.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000355// CHECK: 5: [B9.4]
356// CHECK: 6: [B9.5] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000357// CHECK: 7: [B9.6]
358// CHECK: 8: [B9.7]
359// CHECK: 9: [B9.8] (BindTemporary)
360// CHECK: 10: A([B9.9])
361// CHECK: 11: [B9.10]
362// CHECK: 12: [B9.11]
363// CHECK: 13: [B9.12] (BindTemporary)
364// CHECK: Predecessors (1): B10
365// CHECK: Successors (1): B7
366// CHECK: [ B10 ]
367// CHECK: 1: B()
368// CHECK: 2: [B10.1] (BindTemporary)
369// CHECK: 3: [B10.2].operator _Bool
370// CHECK: 4: [B10.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000371// CHECK: 5: [B10.4]
372// CHECK: T: [B10.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000373// CHECK: Predecessors (1): B11
374// CHECK: Successors (2): B8 B9
375// CHECK: [ B0 (EXIT) ]
376// CHECK: Predecessors (1): B1
377// CHECK: Successors (0):
378// CHECK: [ B14 (ENTRY) ]
379// CHECK: Predecessors (0):
380// CHECK: Successors (1): B13
381// CHECK: [ B1 ]
382// CHECK: 1: ~B() (Temporary object destructor)
383// CHECK: 2: int b;
384// CHECK: 3: [B10.4].~A() (Implicit destructor)
385// CHECK: Predecessors (2): B2 B3
386// CHECK: Successors (1): B0
387// CHECK: [ B2 ]
388// CHECK: 1: ~A() (Temporary object destructor)
389// CHECK: 2: ~A() (Temporary object destructor)
390// CHECK: Predecessors (1): B4
391// CHECK: Successors (1): B1
392// CHECK: [ B3 ]
393// CHECK: 1: ~A() (Temporary object destructor)
394// CHECK: 2: ~A() (Temporary object destructor)
395// CHECK: 3: ~A() (Temporary object destructor)
396// CHECK: 4: ~B() (Temporary object destructor)
397// CHECK: Predecessors (1): B4
398// CHECK: Successors (1): B1
399// CHECK: [ B4 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000400// CHECK: 1: [B7.6] ? [B5.5] : [B6.13]
Ted Kremenek88299892011-07-28 23:07:59 +0000401// CHECK: 2: [B4.1]
402// CHECK: 3: [B4.2]
403// CHECK: 4: foo
404// CHECK: 5: [B4.4]
405// CHECK: 6: [B4.5]([B4.3])
Abramo Bagnara960809e2011-11-16 22:46:05 +0000406// CHECK: T: [B7.6] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000407// CHECK: Predecessors (2): B5 B6
408// CHECK: Successors (2): B2 B3
409// CHECK: [ B5 ]
410// CHECK: 1: A()
411// CHECK: 2: [B5.1] (BindTemporary)
412// CHECK: 3: [B5.2]
413// CHECK: 4: [B5.3]
414// CHECK: 5: [B5.4] (BindTemporary)
415// CHECK: Predecessors (1): B7
416// CHECK: Successors (1): B4
417// CHECK: [ B6 ]
418// CHECK: 1: B()
419// CHECK: 2: [B6.1] (BindTemporary)
420// CHECK: 3: [B6.2].operator A
421// CHECK: 4: [B6.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000422// CHECK: 5: [B6.4]
423// CHECK: 6: [B6.5] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000424// CHECK: 7: [B6.6]
425// CHECK: 8: [B6.7]
426// CHECK: 9: [B6.8] (BindTemporary)
427// CHECK: 10: A([B6.9])
428// CHECK: 11: [B6.10]
429// CHECK: 12: [B6.11]
430// CHECK: 13: [B6.12] (BindTemporary)
431// CHECK: Predecessors (1): B7
432// CHECK: Successors (1): B4
433// CHECK: [ B7 ]
434// CHECK: 1: ~B() (Temporary object destructor)
435// CHECK: 2: B()
436// CHECK: 3: [B7.2] (BindTemporary)
437// CHECK: 4: [B7.3].operator _Bool
438// CHECK: 5: [B7.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000439// CHECK: 6: [B7.5]
440// CHECK: T: [B7.6] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000441// CHECK: Predecessors (2): B8 B9
442// CHECK: Successors (2): B5 B6
443// CHECK: [ B8 ]
444// CHECK: 1: ~A() (Temporary object destructor)
445// CHECK: Predecessors (1): B10
446// CHECK: Successors (1): B7
447// CHECK: [ B9 ]
448// CHECK: 1: ~A() (Temporary object destructor)
449// CHECK: 2: ~A() (Temporary object destructor)
450// CHECK: 3: ~B() (Temporary object destructor)
451// CHECK: Predecessors (1): B10
452// CHECK: Successors (1): B7
453// CHECK: [ B10 ]
Abramo Bagnara960809e2011-11-16 22:46:05 +0000454// CHECK: 1: [B13.5] ? [B11.5] : [B12.13]
Ted Kremenek88299892011-07-28 23:07:59 +0000455// CHECK: 2: [B10.1]
456// CHECK: 3: [B10.2]
457// CHECK: 4: const A &a = B().operator _Bool() ? A() : A(B().operator A());
Abramo Bagnara960809e2011-11-16 22:46:05 +0000458// CHECK: T: [B13.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000459// CHECK: Predecessors (2): B11 B12
460// CHECK: Successors (2): B8 B9
461// CHECK: [ B11 ]
462// CHECK: 1: A()
463// CHECK: 2: [B11.1] (BindTemporary)
464// CHECK: 3: [B11.2]
465// CHECK: 4: [B11.3]
466// CHECK: 5: [B11.4] (BindTemporary)
467// CHECK: Predecessors (1): B13
468// CHECK: Successors (1): B10
469// CHECK: [ B12 ]
470// CHECK: 1: B()
471// CHECK: 2: [B12.1] (BindTemporary)
472// CHECK: 3: [B12.2].operator A
473// CHECK: 4: [B12.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000474// CHECK: 5: [B12.4]
475// CHECK: 6: [B12.5] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000476// CHECK: 7: [B12.6]
477// CHECK: 8: [B12.7]
478// CHECK: 9: [B12.8] (BindTemporary)
479// CHECK: 10: A([B12.9])
480// CHECK: 11: [B12.10]
481// CHECK: 12: [B12.11]
482// CHECK: 13: [B12.12] (BindTemporary)
483// CHECK: Predecessors (1): B13
484// CHECK: Successors (1): B10
485// CHECK: [ B13 ]
486// CHECK: 1: B()
487// CHECK: 2: [B13.1] (BindTemporary)
488// CHECK: 3: [B13.2].operator _Bool
489// CHECK: 4: [B13.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000490// CHECK: 5: [B13.4]
491// CHECK: T: [B13.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000492// CHECK: Predecessors (1): B14
493// CHECK: Successors (2): B11 B12
494// CHECK: [ B0 (EXIT) ]
495// CHECK: Predecessors (1): B1
496// CHECK: Successors (0):
497// CHECK: [ B8 (ENTRY) ]
498// CHECK: Predecessors (0):
499// CHECK: Successors (1): B7
500// CHECK: [ B1 ]
501// CHECK: 1: ~A() (Temporary object destructor)
502// CHECK: 2: int b;
503// CHECK: 3: [B4.4].~A() (Implicit destructor)
504// CHECK: Predecessors (2): B2 B3
505// CHECK: Successors (1): B0
506// CHECK: [ B2 ]
507// CHECK: 1: ~A() (Temporary object destructor)
508// CHECK: Predecessors (1): B4
509// CHECK: Successors (1): B1
510// CHECK: [ B3 ]
511// CHECK: 1: ~A() (Temporary object destructor)
512// CHECK: 2: ~A() (Temporary object destructor)
513// CHECK: Predecessors (1): B4
514// CHECK: Successors (1): B1
515// CHECK: [ B4 ]
516// CHECK: 1: [B7.2] ?: [B6.5]
517// CHECK: 2: [B4.1]
518// CHECK: 3: [B4.2]
519// CHECK: 4: A a = A() ?: A();
Abramo Bagnara960809e2011-11-16 22:46:05 +0000520// CHECK: T: [B7.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000521// CHECK: Predecessors (2): B5 B6
522// CHECK: Successors (2): B2 B3
523// CHECK: [ B5 ]
Ted Kremenek381c0662011-11-30 22:08:08 +0000524// CHECK: 1: [B7.2]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000525// CHECK: 2: [B5.1]
Ted Kremenek88299892011-07-28 23:07:59 +0000526// CHECK: 3: [B5.2]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000527// CHECK: 4: [B5.3] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000528// CHECK: Predecessors (1): B7
529// CHECK: Successors (1): B4
530// CHECK: [ B6 ]
531// CHECK: 1: A()
532// CHECK: 2: [B6.1] (BindTemporary)
533// CHECK: 3: [B6.2]
534// CHECK: 4: [B6.3]
535// CHECK: 5: [B6.4] (BindTemporary)
536// CHECK: Predecessors (1): B7
537// CHECK: Successors (1): B4
538// CHECK: [ B7 ]
539// CHECK: 1: A()
540// CHECK: 2: [B7.1] (BindTemporary)
Ted Kremenek381c0662011-11-30 22:08:08 +0000541// CHECK: 3: [B7.2].operator _Bool
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000542// CHECK: 4: [B7.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000543// CHECK: 5: [B7.4]
544// CHECK: T: [B7.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000545// CHECK: Predecessors (1): B8
546// CHECK: Successors (2): B5 B6
547// CHECK: [ B0 (EXIT) ]
548// CHECK: Predecessors (1): B1
549// CHECK: Successors (0):
550// CHECK: [ B13 (ENTRY) ]
551// CHECK: Predecessors (0):
552// CHECK: Successors (1): B12
553// CHECK: [ B1 ]
554// CHECK: 1: ~A() (Temporary object destructor)
555// CHECK: 2: int b;
556// CHECK: 3: [B9.4].~A() (Implicit destructor)
557// CHECK: Predecessors (2): B2 B3
558// CHECK: Successors (1): B0
559// CHECK: [ B2 ]
560// CHECK: 1: ~A() (Temporary object destructor)
561// CHECK: Predecessors (1): B4
562// CHECK: Successors (1): B1
563// CHECK: [ B3 ]
564// CHECK: 1: ~A() (Temporary object destructor)
565// CHECK: 2: ~A() (Temporary object destructor)
566// CHECK: Predecessors (1): B4
567// CHECK: Successors (1): B1
568// CHECK: [ B4 ]
569// CHECK: 1: [B7.3] ?: [B6.5]
570// CHECK: 2: [B4.1]
571// CHECK: 3: [B4.2]
572// CHECK: 4: foo
573// CHECK: 5: [B4.4]
574// CHECK: 6: [B4.5]([B4.3])
Abramo Bagnara960809e2011-11-16 22:46:05 +0000575// CHECK: T: [B7.6] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000576// CHECK: Predecessors (2): B5 B6
577// CHECK: Successors (2): B2 B3
578// CHECK: [ B5 ]
Ted Kremenek381c0662011-11-30 22:08:08 +0000579// CHECK: 1: [B7.3]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000580// CHECK: 2: [B5.1]
Ted Kremenek88299892011-07-28 23:07:59 +0000581// CHECK: 3: [B5.2]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000582// CHECK: 4: [B5.3] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000583// CHECK: Predecessors (1): B7
584// CHECK: Successors (1): B4
585// CHECK: [ B6 ]
586// CHECK: 1: A()
587// CHECK: 2: [B6.1] (BindTemporary)
588// CHECK: 3: [B6.2]
589// CHECK: 4: [B6.3]
590// CHECK: 5: [B6.4] (BindTemporary)
591// CHECK: Predecessors (1): B7
592// CHECK: Successors (1): B4
593// CHECK: [ B7 ]
594// CHECK: 1: ~A() (Temporary object destructor)
595// CHECK: 2: A()
596// CHECK: 3: [B7.2] (BindTemporary)
Ted Kremenek381c0662011-11-30 22:08:08 +0000597// CHECK: 4: [B7.3].operator _Bool
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000598// CHECK: 5: [B7.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000599// CHECK: 6: [B7.5]
600// CHECK: T: [B7.6] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000601// CHECK: Predecessors (2): B9 B8
602// CHECK: Successors (2): B5 B6
603// CHECK: [ B8 ]
604// CHECK: 1: ~A() (Temporary object destructor)
605// CHECK: Predecessors (1): B9
606// CHECK: Successors (1): B7
607// CHECK: [ B9 ]
608// CHECK: 1: [B12.2] ?: [B11.5]
609// CHECK: 2: [B9.1]
610// CHECK: 3: [B9.2]
611// CHECK: 4: const A &a = A() ?: A();
Abramo Bagnara960809e2011-11-16 22:46:05 +0000612// CHECK: T: [B12.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000613// CHECK: Predecessors (2): B10 B11
614// CHECK: Successors (2): B7 B8
615// CHECK: [ B10 ]
Ted Kremenek381c0662011-11-30 22:08:08 +0000616// CHECK: 1: [B12.2]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000617// CHECK: 2: [B10.1]
Ted Kremenek88299892011-07-28 23:07:59 +0000618// CHECK: 3: [B10.2]
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000619// CHECK: 4: [B10.3] (BindTemporary)
Ted Kremenek88299892011-07-28 23:07:59 +0000620// CHECK: Predecessors (1): B12
621// CHECK: Successors (1): B9
622// CHECK: [ B11 ]
623// CHECK: 1: A()
624// CHECK: 2: [B11.1] (BindTemporary)
625// CHECK: 3: [B11.2]
626// CHECK: 4: [B11.3]
627// CHECK: 5: [B11.4] (BindTemporary)
628// CHECK: Predecessors (1): B12
629// CHECK: Successors (1): B9
630// CHECK: [ B12 ]
631// CHECK: 1: A()
632// CHECK: 2: [B12.1] (BindTemporary)
Ted Kremenek381c0662011-11-30 22:08:08 +0000633// CHECK: 3: [B12.2].operator _Bool
Ted Kremenek6a9065a2011-11-05 00:10:15 +0000634// CHECK: 4: [B12.3]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000635// CHECK: 5: [B12.4]
636// CHECK: T: [B12.5] ? ... : ...
Ted Kremenek88299892011-07-28 23:07:59 +0000637// CHECK: Predecessors (1): B13
638// CHECK: Successors (2): B10 B11
639// CHECK: [ B0 (EXIT) ]
640// CHECK: Predecessors (1): B1
641// CHECK: Successors (0):
642// CHECK: [ B2 (ENTRY) ]
643// CHECK: Predecessors (0):
644// CHECK: Successors (1): B1
645// CHECK: [ B1 ]
646// CHECK: 1: A()
647// CHECK: 2: [B1.1] (BindTemporary)
648// CHECK: 3: [B1.2]
649// CHECK: 4: [B1.3]
650// CHECK: 5: A a = A();
651// CHECK: 6: ~A() (Temporary object destructor)
652// CHECK: 7: int b;
653// CHECK: 8: [B1.5].~A() (Implicit destructor)
654// CHECK: Predecessors (1): B2
655// CHECK: Successors (1): B0
656// CHECK: [ B0 (EXIT) ]
657// CHECK: Predecessors (1): B1
658// CHECK: Successors (0):
659// CHECK: [ B2 (ENTRY) ]
660// CHECK: Predecessors (0):
661// CHECK: Successors (1): B1
662// CHECK: [ B1 ]
663// CHECK: 1: A()
664// CHECK: 2: [B1.1] (BindTemporary)
665// CHECK: 3: [B1.2]
666// CHECK: 4: [B1.3]
667// CHECK: 5: const A &a = A();
668// CHECK: 6: A()
669// CHECK: 7: [B1.6] (BindTemporary)
670// CHECK: 8: [B1.7]
671// CHECK: 9: [B1.8]
672// CHECK: 10: foo
673// CHECK: 11: [B1.10]
674// CHECK: 12: [B1.11]([B1.9])
675// CHECK: 13: ~A() (Temporary object destructor)
676// CHECK: 14: int b;
677// CHECK: 15: [B1.5].~A() (Implicit destructor)
678// CHECK: Predecessors (1): B2
679// CHECK: Successors (1): B0
680// CHECK: [ B0 (EXIT) ]
681// CHECK: Predecessors (1): B1
682// CHECK: Successors (0):
683// CHECK: [ B2 (ENTRY) ]
684// CHECK: Predecessors (0):
685// CHECK: Successors (1): B1
686// CHECK: [ B1 ]
687// CHECK: 1: A::make
688// CHECK: 2: [B1.1]
689// CHECK: 3: [B1.2]()
690// CHECK: 4: [B1.3] (BindTemporary)
691// CHECK: 5: [B1.4]
692// CHECK: 6: [B1.5]
693// CHECK: 7: A a = A::make();
694// CHECK: 8: ~A() (Temporary object destructor)
695// CHECK: 9: int b;
696// CHECK: 10: [B1.7].~A() (Implicit destructor)
697// CHECK: Predecessors (1): B2
698// CHECK: Successors (1): B0
699// CHECK: [ B0 (EXIT) ]
700// CHECK: Predecessors (1): B1
701// CHECK: Successors (0):
702// CHECK: [ B2 (ENTRY) ]
703// CHECK: Predecessors (0):
704// CHECK: Successors (1): B1
705// CHECK: [ B1 ]
706// CHECK: 1: A::make
707// CHECK: 2: [B1.1]
708// CHECK: 3: [B1.2]()
709// CHECK: 4: [B1.3] (BindTemporary)
710// CHECK: 5: [B1.4]
711// CHECK: 6: [B1.5]
712// CHECK: 7: const A &a = A::make();
713// CHECK: 8: A::make
714// CHECK: 9: [B1.8]
715// CHECK: 10: [B1.9]()
716// CHECK: 11: [B1.10] (BindTemporary)
717// CHECK: 12: [B1.11]
718// CHECK: 13: [B1.12]
719// CHECK: 14: foo
720// CHECK: 15: [B1.14]
721// CHECK: 16: [B1.15]([B1.13])
722// CHECK: 17: ~A() (Temporary object destructor)
723// CHECK: 18: int b;
724// CHECK: 19: [B1.7].~A() (Implicit destructor)
725// CHECK: Predecessors (1): B2
726// CHECK: Successors (1): B0
727// CHECK: [ B0 (EXIT) ]
728// CHECK: Predecessors (1): B1
729// CHECK: Successors (0):
730// CHECK: [ B2 (ENTRY) ]
731// CHECK: Predecessors (0):
732// CHECK: Successors (1): B1
733// CHECK: [ B1 ]
734// CHECK: 1: int a;
735// CHECK: 2: A()
736// CHECK: 3: [B1.2] (BindTemporary)
737// CHECK: 4: [B1.3].operator int
738// CHECK: 5: [B1.4]()
Abramo Bagnara960809e2011-11-16 22:46:05 +0000739// CHECK: 6: [B1.5]
740// CHECK: 7: a
741// CHECK: 8: [B1.7] = [B1.6]
742// CHECK: 9: ~A() (Temporary object destructor)
743// CHECK: 10: int b;
Ted Kremenek88299892011-07-28 23:07:59 +0000744// CHECK: Predecessors (1): B2
745// CHECK: Successors (1): B0
746// CHECK: [ B0 (EXIT) ]
747// CHECK: Predecessors (1): B1
748// CHECK: Successors (0):
749// CHECK: [ B2 (ENTRY) ]
750// CHECK: Predecessors (0):
751// CHECK: Successors (1): B1
752// CHECK: [ B1 ]
753// CHECK: 1: A()
754// CHECK: 2: [B1.1] (BindTemporary)
755// CHECK: 3: [B1.2].operator int
756// CHECK: 4: [B1.3]()
757// CHECK: 5: [B1.4]
758// CHECK: 6: int([B1.5])
759// CHECK: 7: B()
760// CHECK: 8: [B1.7] (BindTemporary)
761// CHECK: 9: [B1.8].operator int
762// CHECK: 10: [B1.9]()
763// CHECK: 11: [B1.10]
764// CHECK: 12: int([B1.11])
765// CHECK: 13: [B1.6] + [B1.12]
766// CHECK: 14: a([B1.13]) (Member initializer)
767// CHECK: 15: ~B() (Temporary object destructor)
768// CHECK: 16: ~A() (Temporary object destructor)
769// CHECK: 17: /*implicit*/int()
770// CHECK: 18: b([B1.17]) (Member initializer)
771// CHECK: Predecessors (1): B2
772// CHECK: Successors (1): B0
773// CHECK: [ B0 (EXIT) ]
774// CHECK: Predecessors (1): B1
775// CHECK: Successors (0):
Ted Kremenek381c0662011-11-30 22:08:08 +0000776