1f4a2713aSLionel Sambuc // RUN: rm -f %t
2f4a2713aSLionel Sambuc // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -analyzer-config cfg-temporary-dtors=true %s > %t 2>&1
3f4a2713aSLionel Sambuc // RUN: FileCheck --input-file=%t %s
4f4a2713aSLionel Sambuc 
5f4a2713aSLionel Sambuc class A {
6f4a2713aSLionel Sambuc public:
A()7f4a2713aSLionel Sambuc   A() {}
~A()8f4a2713aSLionel Sambuc   ~A() {}
9f4a2713aSLionel Sambuc 
make()10f4a2713aSLionel Sambuc   static A make() { return A(); }
11f4a2713aSLionel Sambuc 
operator bool()12f4a2713aSLionel Sambuc   operator bool() { return false; }
operator int()13f4a2713aSLionel Sambuc   operator int() { return 0; }
14f4a2713aSLionel Sambuc };
15f4a2713aSLionel Sambuc 
16f4a2713aSLionel Sambuc class B {
17f4a2713aSLionel Sambuc public:
B()18f4a2713aSLionel Sambuc   B() {}
~B()19f4a2713aSLionel Sambuc   ~B() {}
20f4a2713aSLionel Sambuc 
operator bool()21f4a2713aSLionel Sambuc   operator bool() { return true; }
operator int()22f4a2713aSLionel Sambuc   operator int() { return 1; }
operator A()23f4a2713aSLionel Sambuc   operator A() { return A(); }
24f4a2713aSLionel Sambuc };
25f4a2713aSLionel Sambuc 
26f4a2713aSLionel Sambuc void foo(int);
27f4a2713aSLionel Sambuc void foo(bool);
28f4a2713aSLionel Sambuc void foo(const A&);
29f4a2713aSLionel Sambuc 
test_binary()30f4a2713aSLionel Sambuc void test_binary() {
31f4a2713aSLionel Sambuc   int a = int(A()) + int(B());
32f4a2713aSLionel Sambuc   foo(int(A()) + int(B()));
33f4a2713aSLionel Sambuc   int b;
34f4a2713aSLionel Sambuc }
35f4a2713aSLionel Sambuc 
test_and()36f4a2713aSLionel Sambuc void test_and() {
37f4a2713aSLionel Sambuc   bool a = A() && B();
38f4a2713aSLionel Sambuc   foo(A() && B());
39f4a2713aSLionel Sambuc   int b;
40f4a2713aSLionel Sambuc }
41f4a2713aSLionel Sambuc 
test_or()42f4a2713aSLionel Sambuc void test_or() {
43f4a2713aSLionel Sambuc   bool a = A() || B();
44f4a2713aSLionel Sambuc   foo(A() || B());
45f4a2713aSLionel Sambuc   int b;
46f4a2713aSLionel Sambuc }
47f4a2713aSLionel Sambuc 
test_cond()48f4a2713aSLionel Sambuc void test_cond() {
49f4a2713aSLionel Sambuc   A a = B() ? A() : A(B());
50f4a2713aSLionel Sambuc   if (B()) { foo(0); } else { foo(0); }
51f4a2713aSLionel Sambuc   int b;
52f4a2713aSLionel Sambuc }
53f4a2713aSLionel Sambuc 
54*0a6a1f1dSLionel Sambuc struct C {
CC55*0a6a1f1dSLionel Sambuc   C():b_(true) {}
~CC56*0a6a1f1dSLionel Sambuc   ~C() {}
57*0a6a1f1dSLionel Sambuc 
operator boolC58*0a6a1f1dSLionel Sambuc   operator bool() { return b_; }
59*0a6a1f1dSLionel Sambuc   bool b_;
60*0a6a1f1dSLionel Sambuc };
61*0a6a1f1dSLionel Sambuc 
62*0a6a1f1dSLionel Sambuc struct D {
DD63*0a6a1f1dSLionel Sambuc   D():b_(true) {}
64*0a6a1f1dSLionel Sambuc 
operator boolD65*0a6a1f1dSLionel Sambuc   operator bool() { return b_; }
66*0a6a1f1dSLionel Sambuc   bool b_;
67*0a6a1f1dSLionel Sambuc };
68*0a6a1f1dSLionel Sambuc 
test_cond_unnamed_custom_destructor()69*0a6a1f1dSLionel Sambuc int test_cond_unnamed_custom_destructor() {
70*0a6a1f1dSLionel Sambuc   if (C()) { return 1; } else { return 0; }
71*0a6a1f1dSLionel Sambuc }
72*0a6a1f1dSLionel Sambuc 
test_cond_named_custom_destructor()73*0a6a1f1dSLionel Sambuc int test_cond_named_custom_destructor() {
74*0a6a1f1dSLionel Sambuc   if (C c = C()) { return 1; } else { return 0; }
75*0a6a1f1dSLionel Sambuc }
76*0a6a1f1dSLionel Sambuc 
test_cond_unnamed_auto_destructor()77*0a6a1f1dSLionel Sambuc int test_cond_unnamed_auto_destructor() {
78*0a6a1f1dSLionel Sambuc   if (D()) { return 1; } else { return 0; }
79*0a6a1f1dSLionel Sambuc }
80*0a6a1f1dSLionel Sambuc 
test_cond_named_auto_destructor()81*0a6a1f1dSLionel Sambuc int test_cond_named_auto_destructor() {
82*0a6a1f1dSLionel Sambuc   if (D d = D()) { return 1; } else { return 0; }
83*0a6a1f1dSLionel Sambuc }
84*0a6a1f1dSLionel Sambuc 
test_cond_cref()85f4a2713aSLionel Sambuc void test_cond_cref() {
86f4a2713aSLionel Sambuc   const A& a = B() ? A() : A(B());
87f4a2713aSLionel Sambuc   foo(B() ? A() : A(B()));
88f4a2713aSLionel Sambuc   int b;
89f4a2713aSLionel Sambuc }
90f4a2713aSLionel Sambuc 
test_cond_implicit()91f4a2713aSLionel Sambuc void test_cond_implicit() {
92f4a2713aSLionel Sambuc   A a = A() ?: A();
93f4a2713aSLionel Sambuc   int b;
94f4a2713aSLionel Sambuc }
95f4a2713aSLionel Sambuc 
test_cond_implicit_cref()96f4a2713aSLionel Sambuc void test_cond_implicit_cref() {
97f4a2713aSLionel Sambuc   const A& a = A() ?: A();
98f4a2713aSLionel Sambuc   foo(A() ?: A());
99f4a2713aSLionel Sambuc   int b;
100f4a2713aSLionel Sambuc }
101f4a2713aSLionel Sambuc 
test_copy_init()102f4a2713aSLionel Sambuc void test_copy_init() {
103f4a2713aSLionel Sambuc   A a = A();
104f4a2713aSLionel Sambuc   int b;
105f4a2713aSLionel Sambuc }
106f4a2713aSLionel Sambuc 
test_cref_init()107f4a2713aSLionel Sambuc void test_cref_init() {
108f4a2713aSLionel Sambuc   const A& a = A();
109f4a2713aSLionel Sambuc   foo(A());
110f4a2713aSLionel Sambuc   int b;
111f4a2713aSLionel Sambuc }
112f4a2713aSLionel Sambuc 
test_call_copy_init()113f4a2713aSLionel Sambuc void test_call_copy_init() {
114f4a2713aSLionel Sambuc   A a = A::make();
115f4a2713aSLionel Sambuc   int b;
116f4a2713aSLionel Sambuc }
117f4a2713aSLionel Sambuc 
test_call_cref_init()118f4a2713aSLionel Sambuc void test_call_cref_init() {
119f4a2713aSLionel Sambuc   const A& a = A::make();
120f4a2713aSLionel Sambuc   foo(A::make());
121f4a2713aSLionel Sambuc   int b;
122f4a2713aSLionel Sambuc }
123f4a2713aSLionel Sambuc 
test_assign()124f4a2713aSLionel Sambuc void test_assign() {
125f4a2713aSLionel Sambuc   int a;
126f4a2713aSLionel Sambuc   a = A();
127f4a2713aSLionel Sambuc   int b;
128f4a2713aSLionel Sambuc }
129f4a2713aSLionel Sambuc 
130f4a2713aSLionel Sambuc class TestCtorInits {
131f4a2713aSLionel Sambuc   int a;
132f4a2713aSLionel Sambuc   int b;
133f4a2713aSLionel Sambuc public:
134f4a2713aSLionel Sambuc   TestCtorInits();
135f4a2713aSLionel Sambuc };
136f4a2713aSLionel Sambuc 
TestCtorInits()137f4a2713aSLionel Sambuc TestCtorInits::TestCtorInits()
138f4a2713aSLionel Sambuc   : a(int(A()) + int(B()))
139f4a2713aSLionel Sambuc   , b() {}
140f4a2713aSLionel Sambuc 
141f4a2713aSLionel Sambuc class NoReturn {
142f4a2713aSLionel Sambuc public:
143f4a2713aSLionel Sambuc   ~NoReturn() __attribute__((noreturn));
144f4a2713aSLionel Sambuc   void f();
145f4a2713aSLionel Sambuc };
146f4a2713aSLionel Sambuc 
test_noreturn1()147f4a2713aSLionel Sambuc void test_noreturn1() {
148f4a2713aSLionel Sambuc   int a;
149f4a2713aSLionel Sambuc   NoReturn().f();
150f4a2713aSLionel Sambuc   int b;
151f4a2713aSLionel Sambuc }
152f4a2713aSLionel Sambuc 
test_noreturn2()153f4a2713aSLionel Sambuc void test_noreturn2() {
154f4a2713aSLionel Sambuc   int a;
155f4a2713aSLionel Sambuc   NoReturn(), 47;
156f4a2713aSLionel Sambuc   int b;
157f4a2713aSLionel Sambuc }
158f4a2713aSLionel Sambuc 
159*0a6a1f1dSLionel Sambuc extern bool check(const NoReturn&);
160*0a6a1f1dSLionel Sambuc 
161*0a6a1f1dSLionel Sambuc // PR16664 and PR18159
testConsistencyNestedSimple(bool value)162*0a6a1f1dSLionel Sambuc int testConsistencyNestedSimple(bool value) {
163*0a6a1f1dSLionel Sambuc   if (value) {
164*0a6a1f1dSLionel Sambuc     if (!value || check(NoReturn())) {
165*0a6a1f1dSLionel Sambuc       return 1;
166*0a6a1f1dSLionel Sambuc     }
167*0a6a1f1dSLionel Sambuc   }
168*0a6a1f1dSLionel Sambuc   return 0;
169*0a6a1f1dSLionel Sambuc }
170*0a6a1f1dSLionel Sambuc 
171*0a6a1f1dSLionel Sambuc // PR16664 and PR18159
testConsistencyNestedComplex(bool value)172*0a6a1f1dSLionel Sambuc int testConsistencyNestedComplex(bool value) {
173*0a6a1f1dSLionel Sambuc   if (value) {
174*0a6a1f1dSLionel Sambuc     if (!value || !value || check(NoReturn())) {
175*0a6a1f1dSLionel Sambuc       return 1;
176*0a6a1f1dSLionel Sambuc     }
177*0a6a1f1dSLionel Sambuc   }
178*0a6a1f1dSLionel Sambuc   return 0;
179*0a6a1f1dSLionel Sambuc }
180*0a6a1f1dSLionel Sambuc 
181*0a6a1f1dSLionel Sambuc // PR16664 and PR18159
testConsistencyNestedNormalReturn(bool value)182*0a6a1f1dSLionel Sambuc int testConsistencyNestedNormalReturn(bool value) {
183*0a6a1f1dSLionel Sambuc   if (value) {
184*0a6a1f1dSLionel Sambuc     if (!value || value || check(NoReturn())) {
185*0a6a1f1dSLionel Sambuc       return 1;
186*0a6a1f1dSLionel Sambuc     }
187*0a6a1f1dSLionel Sambuc   }
188*0a6a1f1dSLionel Sambuc   return 0;
189*0a6a1f1dSLionel Sambuc }
190*0a6a1f1dSLionel Sambuc 
191f4a2713aSLionel Sambuc // CHECK:   [B1 (ENTRY)]
192f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
193f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
194f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
195f4a2713aSLionel Sambuc // CHECK:   [B1 (ENTRY)]
196f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
197f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
198f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
199f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
200f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
201f4a2713aSLionel Sambuc // CHECK:   [B1]
202f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
203f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
204f4a2713aSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
205f4a2713aSLionel Sambuc // CHECK:     4: [B1.3]
206f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
207f4a2713aSLionel Sambuc // CHECK:     6: ~A() (Temporary object destructor)
208f4a2713aSLionel Sambuc // CHECK:     7: return [B1.5];
209f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
210f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
211f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
212f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
213f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
214f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
215f4a2713aSLionel Sambuc // CHECK:   [B1]
216f4a2713aSLionel Sambuc // CHECK:     1: false
217f4a2713aSLionel Sambuc // CHECK:     2: return [B1.1];
218f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
219f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
220f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
221f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
222f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
223f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
224f4a2713aSLionel Sambuc // CHECK:   [B1]
225f4a2713aSLionel Sambuc // CHECK:     1: 0
226f4a2713aSLionel Sambuc // CHECK:     2: return [B1.1];
227f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
228f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
229f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
230f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
231f4a2713aSLionel Sambuc // CHECK:   [B1 (ENTRY)]
232f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
233f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
234f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
235f4a2713aSLionel Sambuc // CHECK:   [B1 (ENTRY)]
236f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
237f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
238f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
239f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
240f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
241f4a2713aSLionel Sambuc // CHECK:   [B1]
242f4a2713aSLionel Sambuc // CHECK:     1: true
243f4a2713aSLionel Sambuc // CHECK:     2: return [B1.1];
244f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
245f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
246f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
247f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
248f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
249f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
250f4a2713aSLionel Sambuc // CHECK:   [B1]
251f4a2713aSLionel Sambuc // CHECK:     1: 1
252f4a2713aSLionel Sambuc // CHECK:     2: return [B1.1];
253f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
254f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
255f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
256f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
257f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
258f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
259f4a2713aSLionel Sambuc // CHECK:   [B1]
260f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
261f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
262f4a2713aSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
263f4a2713aSLionel Sambuc // CHECK:     4: [B1.3]
264f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
265f4a2713aSLionel Sambuc // CHECK:     6: ~A() (Temporary object destructor)
266f4a2713aSLionel Sambuc // CHECK:     7: return [B1.5];
267f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
268f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
269f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
270f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
271f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
272f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
273f4a2713aSLionel Sambuc // CHECK:   [B1]
274f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
275f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
276f4a2713aSLionel Sambuc // CHECK:     3: [B1.2].operator int
277*0a6a1f1dSLionel Sambuc // CHECK:     4: [B1.2]
278f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (ImplicitCastExpr, UserDefinedConversion, int)
279f4a2713aSLionel Sambuc // CHECK:     6: int([B1.5]) (CXXFunctionalCastExpr, NoOp, int)
280f4a2713aSLionel Sambuc // CHECK:     7: B() (CXXConstructExpr, class B)
281f4a2713aSLionel Sambuc // CHECK:     8: [B1.7] (BindTemporary)
282f4a2713aSLionel Sambuc // CHECK:     9: [B1.8].operator int
283*0a6a1f1dSLionel Sambuc // CHECK:    10: [B1.8]
284f4a2713aSLionel Sambuc // CHECK:    11: [B1.10] (ImplicitCastExpr, UserDefinedConversion, int)
285f4a2713aSLionel Sambuc // CHECK:    12: int([B1.11]) (CXXFunctionalCastExpr, NoOp, int)
286f4a2713aSLionel Sambuc // CHECK:    13: [B1.6] + [B1.12]
287*0a6a1f1dSLionel Sambuc // CHECK:    14: int a = int(A()) + int(B());
288f4a2713aSLionel Sambuc // CHECK:    15: ~B() (Temporary object destructor)
289f4a2713aSLionel Sambuc // CHECK:    16: ~A() (Temporary object destructor)
290f4a2713aSLionel Sambuc // CHECK:    17: foo
291f4a2713aSLionel Sambuc // CHECK:    18: [B1.17] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(int))
292f4a2713aSLionel Sambuc // CHECK:    19: A() (CXXConstructExpr, class A)
293f4a2713aSLionel Sambuc // CHECK:    20: [B1.19] (BindTemporary)
294f4a2713aSLionel Sambuc // CHECK:    21: [B1.20].operator int
295*0a6a1f1dSLionel Sambuc // CHECK:    22: [B1.20]
296f4a2713aSLionel Sambuc // CHECK:    23: [B1.22] (ImplicitCastExpr, UserDefinedConversion, int)
297f4a2713aSLionel Sambuc // CHECK:    24: int([B1.23]) (CXXFunctionalCastExpr, NoOp, int)
298f4a2713aSLionel Sambuc // CHECK:    25: B() (CXXConstructExpr, class B)
299f4a2713aSLionel Sambuc // CHECK:    26: [B1.25] (BindTemporary)
300f4a2713aSLionel Sambuc // CHECK:    27: [B1.26].operator int
301*0a6a1f1dSLionel Sambuc // CHECK:    28: [B1.26]
302f4a2713aSLionel Sambuc // CHECK:    29: [B1.28] (ImplicitCastExpr, UserDefinedConversion, int)
303f4a2713aSLionel Sambuc // CHECK:    30: int([B1.29]) (CXXFunctionalCastExpr, NoOp, int)
304f4a2713aSLionel Sambuc // CHECK:    31: [B1.24] + [B1.30]
305f4a2713aSLionel Sambuc // CHECK:    32: [B1.18]([B1.31])
306f4a2713aSLionel Sambuc // CHECK:    33: ~B() (Temporary object destructor)
307f4a2713aSLionel Sambuc // CHECK:    34: ~A() (Temporary object destructor)
308f4a2713aSLionel Sambuc // CHECK:    35: int b;
309f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
310f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
311f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
312f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
313f4a2713aSLionel Sambuc // CHECK:   [B10 (ENTRY)]
314f4a2713aSLionel Sambuc // CHECK:     Succs (1): B9
315f4a2713aSLionel Sambuc // CHECK:   [B1]
316f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
317f4a2713aSLionel Sambuc // CHECK:     2: int b;
318f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
319f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
320f4a2713aSLionel Sambuc // CHECK:   [B2]
321f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
322f4a2713aSLionel Sambuc // CHECK:     Preds (1): B3
323f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
324f4a2713aSLionel Sambuc // CHECK:   [B3]
325f4a2713aSLionel Sambuc // CHECK:     1: [B5.8] && [B4.5]
326f4a2713aSLionel Sambuc // CHECK:     2: [B5.3]([B3.1])
327*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B4.2]
328f4a2713aSLionel Sambuc // CHECK:     Preds (2): B4 B5
329f4a2713aSLionel Sambuc // CHECK:     Succs (2): B2 B1
330f4a2713aSLionel Sambuc // CHECK:   [B4]
331f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
332f4a2713aSLionel Sambuc // CHECK:     2: [B4.1] (BindTemporary)
333*0a6a1f1dSLionel Sambuc // CHECK:     3: [B4.2].operator bool
334*0a6a1f1dSLionel Sambuc // CHECK:     4: [B4.2]
335f4a2713aSLionel Sambuc // CHECK:     5: [B4.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
336f4a2713aSLionel Sambuc // CHECK:     Preds (1): B5
337f4a2713aSLionel Sambuc // CHECK:     Succs (1): B3
338f4a2713aSLionel Sambuc // CHECK:   [B5]
339f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
340f4a2713aSLionel Sambuc // CHECK:     2: foo
341f4a2713aSLionel Sambuc // CHECK:     3: [B5.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(_Bool))
342f4a2713aSLionel Sambuc // CHECK:     4: A() (CXXConstructExpr, class A)
343f4a2713aSLionel Sambuc // CHECK:     5: [B5.4] (BindTemporary)
344*0a6a1f1dSLionel Sambuc // CHECK:     6: [B5.5].operator bool
345*0a6a1f1dSLionel Sambuc // CHECK:     7: [B5.5]
346f4a2713aSLionel Sambuc // CHECK:     8: [B5.7] (ImplicitCastExpr, UserDefinedConversion, _Bool)
347f4a2713aSLionel Sambuc // CHECK:     T: [B5.8] && ...
348f4a2713aSLionel Sambuc // CHECK:     Preds (2): B6 B7
349f4a2713aSLionel Sambuc // CHECK:     Succs (2): B4 B3
350f4a2713aSLionel Sambuc // CHECK:   [B6]
351f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
352f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
353f4a2713aSLionel Sambuc // CHECK:     Succs (1): B5
354f4a2713aSLionel Sambuc // CHECK:   [B7]
355f4a2713aSLionel Sambuc // CHECK:     1: [B9.5] && [B8.5]
356*0a6a1f1dSLionel Sambuc // CHECK:     2: bool a = A() && B();
357*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B8.2]
358f4a2713aSLionel Sambuc // CHECK:     Preds (2): B8 B9
359f4a2713aSLionel Sambuc // CHECK:     Succs (2): B6 B5
360f4a2713aSLionel Sambuc // CHECK:   [B8]
361f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
362f4a2713aSLionel Sambuc // CHECK:     2: [B8.1] (BindTemporary)
363*0a6a1f1dSLionel Sambuc // CHECK:     3: [B8.2].operator bool
364*0a6a1f1dSLionel Sambuc // CHECK:     4: [B8.2]
365f4a2713aSLionel Sambuc // CHECK:     5: [B8.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
366f4a2713aSLionel Sambuc // CHECK:     Preds (1): B9
367f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
368f4a2713aSLionel Sambuc // CHECK:   [B9]
369f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
370f4a2713aSLionel Sambuc // CHECK:     2: [B9.1] (BindTemporary)
371*0a6a1f1dSLionel Sambuc // CHECK:     3: [B9.2].operator bool
372*0a6a1f1dSLionel Sambuc // CHECK:     4: [B9.2]
373f4a2713aSLionel Sambuc // CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
374f4a2713aSLionel Sambuc // CHECK:     T: [B9.5] && ...
375f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
376f4a2713aSLionel Sambuc // CHECK:     Succs (2): B8 B7
377f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
378f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
379f4a2713aSLionel Sambuc // CHECK:   [B10 (ENTRY)]
380f4a2713aSLionel Sambuc // CHECK:     Succs (1): B9
381f4a2713aSLionel Sambuc // CHECK:   [B1]
382f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
383f4a2713aSLionel Sambuc // CHECK:     2: int b;
384f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
385f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
386f4a2713aSLionel Sambuc // CHECK:   [B2]
387f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
388f4a2713aSLionel Sambuc // CHECK:     Preds (1): B3
389f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
390f4a2713aSLionel Sambuc // CHECK:   [B3]
391f4a2713aSLionel Sambuc // CHECK:     1: [B5.8] || [B4.5]
392f4a2713aSLionel Sambuc // CHECK:     2: [B5.3]([B3.1])
393*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B4.2]
394f4a2713aSLionel Sambuc // CHECK:     Preds (2): B4 B5
395*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
396f4a2713aSLionel Sambuc // CHECK:   [B4]
397f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
398f4a2713aSLionel Sambuc // CHECK:     2: [B4.1] (BindTemporary)
399*0a6a1f1dSLionel Sambuc // CHECK:     3: [B4.2].operator bool
400*0a6a1f1dSLionel Sambuc // CHECK:     4: [B4.2]
401f4a2713aSLionel Sambuc // CHECK:     5: [B4.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
402f4a2713aSLionel Sambuc // CHECK:     Preds (1): B5
403f4a2713aSLionel Sambuc // CHECK:     Succs (1): B3
404f4a2713aSLionel Sambuc // CHECK:   [B5]
405f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
406f4a2713aSLionel Sambuc // CHECK:     2: foo
407f4a2713aSLionel Sambuc // CHECK:     3: [B5.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(_Bool))
408f4a2713aSLionel Sambuc // CHECK:     4: A() (CXXConstructExpr, class A)
409f4a2713aSLionel Sambuc // CHECK:     5: [B5.4] (BindTemporary)
410*0a6a1f1dSLionel Sambuc // CHECK:     6: [B5.5].operator bool
411*0a6a1f1dSLionel Sambuc // CHECK:     7: [B5.5]
412f4a2713aSLionel Sambuc // CHECK:     8: [B5.7] (ImplicitCastExpr, UserDefinedConversion, _Bool)
413f4a2713aSLionel Sambuc // CHECK:     T: [B5.8] || ...
414f4a2713aSLionel Sambuc // CHECK:     Preds (2): B6 B7
415f4a2713aSLionel Sambuc // CHECK:     Succs (2): B3 B4
416f4a2713aSLionel Sambuc // CHECK:   [B6]
417f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
418f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
419f4a2713aSLionel Sambuc // CHECK:     Succs (1): B5
420f4a2713aSLionel Sambuc // CHECK:   [B7]
421f4a2713aSLionel Sambuc // CHECK:     1: [B9.5] || [B8.5]
422*0a6a1f1dSLionel Sambuc // CHECK:     2: bool a = A() || B();
423*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B8.2]
424f4a2713aSLionel Sambuc // CHECK:     Preds (2): B8 B9
425*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B6 B5
426f4a2713aSLionel Sambuc // CHECK:   [B8]
427f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
428f4a2713aSLionel Sambuc // CHECK:     2: [B8.1] (BindTemporary)
429*0a6a1f1dSLionel Sambuc // CHECK:     3: [B8.2].operator bool
430*0a6a1f1dSLionel Sambuc // CHECK:     4: [B8.2]
431f4a2713aSLionel Sambuc // CHECK:     5: [B8.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
432f4a2713aSLionel Sambuc // CHECK:     Preds (1): B9
433f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
434f4a2713aSLionel Sambuc // CHECK:   [B9]
435f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
436f4a2713aSLionel Sambuc // CHECK:     2: [B9.1] (BindTemporary)
437*0a6a1f1dSLionel Sambuc // CHECK:     3: [B9.2].operator bool
438*0a6a1f1dSLionel Sambuc // CHECK:     4: [B9.2]
439f4a2713aSLionel Sambuc // CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
440f4a2713aSLionel Sambuc // CHECK:     T: [B9.5] || ...
441f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
442f4a2713aSLionel Sambuc // CHECK:     Succs (2): B7 B8
443f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
444f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
445f4a2713aSLionel Sambuc // CHECK:   [B11 (ENTRY)]
446f4a2713aSLionel Sambuc // CHECK:     Succs (1): B10
447f4a2713aSLionel Sambuc // CHECK:   [B1]
448f4a2713aSLionel Sambuc // CHECK:     1: int b;
449f4a2713aSLionel Sambuc // CHECK:     2: [B7.5].~A() (Implicit destructor)
450f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
451f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
452f4a2713aSLionel Sambuc // CHECK:   [B2]
453f4a2713aSLionel Sambuc // CHECK:     1: foo
454f4a2713aSLionel Sambuc // CHECK:     2: [B2.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(int))
455f4a2713aSLionel Sambuc // CHECK:     3: 0
456f4a2713aSLionel Sambuc // CHECK:     4: [B2.2]([B2.3])
457f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
458f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
459f4a2713aSLionel Sambuc // CHECK:   [B3]
460f4a2713aSLionel Sambuc // CHECK:     1: foo
461f4a2713aSLionel Sambuc // CHECK:     2: [B3.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(int))
462f4a2713aSLionel Sambuc // CHECK:     3: 0
463f4a2713aSLionel Sambuc // CHECK:     4: [B3.2]([B3.3])
464f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
465f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
466f4a2713aSLionel Sambuc // CHECK:   [B4]
467f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
468f4a2713aSLionel Sambuc // CHECK:     2: B() (CXXConstructExpr, class B)
469f4a2713aSLionel Sambuc // CHECK:     3: [B4.2] (BindTemporary)
470*0a6a1f1dSLionel Sambuc // CHECK:     4: [B4.3].operator bool
471*0a6a1f1dSLionel Sambuc // CHECK:     5: [B4.3]
472f4a2713aSLionel Sambuc // CHECK:     6: [B4.5] (ImplicitCastExpr, UserDefinedConversion, _Bool)
473f4a2713aSLionel Sambuc // CHECK:     7: ~B() (Temporary object destructor)
474f4a2713aSLionel Sambuc // CHECK:     T: if [B4.6]
475f4a2713aSLionel Sambuc // CHECK:     Preds (2): B5 B6
476f4a2713aSLionel Sambuc // CHECK:     Succs (2): B3 B2
477f4a2713aSLionel Sambuc // CHECK:   [B5]
478f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
479f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
480f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
481f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
482f4a2713aSLionel Sambuc // CHECK:   [B6]
483f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
484f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
485f4a2713aSLionel Sambuc // CHECK:     3: ~A() (Temporary object destructor)
486f4a2713aSLionel Sambuc // CHECK:     4: ~B() (Temporary object destructor)
487f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
488f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
489f4a2713aSLionel Sambuc // CHECK:   [B7]
490f4a2713aSLionel Sambuc // CHECK:     1: [B10.5] ? [B8.6] : [B9.15]
491f4a2713aSLionel Sambuc // CHECK:     2: [B7.1] (ImplicitCastExpr, NoOp, const class A)
492f4a2713aSLionel Sambuc // CHECK:     3: [B7.2]
493f4a2713aSLionel Sambuc // CHECK:     4: [B7.3] (CXXConstructExpr, class A)
494*0a6a1f1dSLionel Sambuc // CHECK:     5: A a = B() ? A() : A(B());
495*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B9.2]
496f4a2713aSLionel Sambuc // CHECK:     Preds (2): B8 B9
497*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B6 B5
498f4a2713aSLionel Sambuc // CHECK:   [B8]
499f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
500f4a2713aSLionel Sambuc // CHECK:     2: [B8.1] (BindTemporary)
501f4a2713aSLionel Sambuc // CHECK:     3: [B8.2] (ImplicitCastExpr, NoOp, const class A)
502f4a2713aSLionel Sambuc // CHECK:     4: [B8.3]
503f4a2713aSLionel Sambuc // CHECK:     5: [B8.4] (CXXConstructExpr, class A)
504f4a2713aSLionel Sambuc // CHECK:     6: [B8.5] (BindTemporary)
505f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
506f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
507f4a2713aSLionel Sambuc // CHECK:   [B9]
508f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
509f4a2713aSLionel Sambuc // CHECK:     2: [B9.1] (BindTemporary)
510f4a2713aSLionel Sambuc // CHECK:     3: [B9.2].operator A
511*0a6a1f1dSLionel Sambuc // CHECK:     4: [B9.2]
512f4a2713aSLionel Sambuc // CHECK:     5: [B9.4] (ImplicitCastExpr, UserDefinedConversion, class A)
513f4a2713aSLionel Sambuc // CHECK:     6: [B9.5] (BindTemporary)
514f4a2713aSLionel Sambuc // CHECK:     7: [B9.6] (ImplicitCastExpr, NoOp, const class A)
515f4a2713aSLionel Sambuc // CHECK:     8: [B9.7]
516f4a2713aSLionel Sambuc // CHECK:     9: [B9.8] (CXXConstructExpr, class A)
517f4a2713aSLionel Sambuc // CHECK:    10: [B9.9] (BindTemporary)
518f4a2713aSLionel Sambuc // CHECK:    11: A([B9.10]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
519f4a2713aSLionel Sambuc // CHECK:    12: [B9.11] (ImplicitCastExpr, NoOp, const class A)
520f4a2713aSLionel Sambuc // CHECK:    13: [B9.12]
521f4a2713aSLionel Sambuc // CHECK:    14: [B9.13] (CXXConstructExpr, class A)
522f4a2713aSLionel Sambuc // CHECK:    15: [B9.14] (BindTemporary)
523f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
524f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
525f4a2713aSLionel Sambuc // CHECK:   [B10]
526f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
527f4a2713aSLionel Sambuc // CHECK:     2: [B10.1] (BindTemporary)
528*0a6a1f1dSLionel Sambuc // CHECK:     3: [B10.2].operator bool
529*0a6a1f1dSLionel Sambuc // CHECK:     4: [B10.2]
530f4a2713aSLionel Sambuc // CHECK:     5: [B10.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
531f4a2713aSLionel Sambuc // CHECK:     T: [B10.5] ? ... : ...
532f4a2713aSLionel Sambuc // CHECK:     Preds (1): B11
533f4a2713aSLionel Sambuc // CHECK:     Succs (2): B8 B9
534f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
535f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
536*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (ENTRY)]
537*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B1
538*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
539*0a6a1f1dSLionel Sambuc // CHECK:     1: true
540*0a6a1f1dSLionel Sambuc // CHECK:     2: b_([B1.1]) (Member initializer)
541*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2
542*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
543*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
544*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B1
545*0a6a1f1dSLionel Sambuc // CHECK:   [B1 (ENTRY)]
546*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
547*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
548*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B1
549*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (ENTRY)]
550*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B1
551*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
552*0a6a1f1dSLionel Sambuc // CHECK:     1: this
553*0a6a1f1dSLionel Sambuc // CHECK:     2: [B1.1]->b_
554*0a6a1f1dSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, LValueToRValue, _Bool)
555*0a6a1f1dSLionel Sambuc // CHECK:     4: return [B1.3];
556*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2
557*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
558*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
559*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B1
560*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (ENTRY)]
561*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B1
562*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
563*0a6a1f1dSLionel Sambuc // CHECK:     1: true
564*0a6a1f1dSLionel Sambuc // CHECK:     2: b_([B1.1]) (Member initializer)
565*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2
566*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
567*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
568*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B1
569*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (ENTRY)]
570*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B1
571*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
572*0a6a1f1dSLionel Sambuc // CHECK:     1: this
573*0a6a1f1dSLionel Sambuc // CHECK:     2: [B1.1]->b_
574*0a6a1f1dSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, LValueToRValue, _Bool)
575*0a6a1f1dSLionel Sambuc // CHECK:     4: return [B1.3];
576*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2
577*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
578*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
579*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B1
580*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (ENTRY)]
581*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B3
582*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
583*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
584*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
585*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
586*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
587*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
588*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
589*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
590*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
591*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
592*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
593*0a6a1f1dSLionel Sambuc // CHECK:     1: C() (CXXConstructExpr, struct C)
594*0a6a1f1dSLionel Sambuc // CHECK:     2: [B3.1] (BindTemporary)
595*0a6a1f1dSLionel Sambuc // CHECK:     3: [B3.2].operator bool
596*0a6a1f1dSLionel Sambuc // CHECK:     4: [B3.2]
597*0a6a1f1dSLionel Sambuc // CHECK:     5: [B3.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
598*0a6a1f1dSLionel Sambuc // CHECK:     6: ~C() (Temporary object destructor)
599*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B3.5]
600*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B4
601*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
602*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
603*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B1 B2
604*0a6a1f1dSLionel Sambuc // CHECK:   [B5 (ENTRY)]
605*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B4
606*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
607*0a6a1f1dSLionel Sambuc // CHECK:     1: [B4.6].~C() (Implicit destructor)
608*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
609*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
610*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
611*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
612*0a6a1f1dSLionel Sambuc // CHECK:     3: [B4.6].~C() (Implicit destructor)
613*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B4
614*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
615*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
616*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
617*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B3.1];
618*0a6a1f1dSLionel Sambuc // CHECK:     3: [B4.6].~C() (Implicit destructor)
619*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B4
620*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
621*0a6a1f1dSLionel Sambuc // CHECK:   [B4]
622*0a6a1f1dSLionel Sambuc // CHECK:     1: C() (CXXConstructExpr, struct C)
623*0a6a1f1dSLionel Sambuc // CHECK:     2: [B4.1] (BindTemporary)
624*0a6a1f1dSLionel Sambuc // CHECK:     3: [B4.2] (ImplicitCastExpr, NoOp, const struct C)
625*0a6a1f1dSLionel Sambuc // CHECK:     4: [B4.3]
626*0a6a1f1dSLionel Sambuc // CHECK:     5: [B4.4] (CXXConstructExpr, struct C)
627*0a6a1f1dSLionel Sambuc // CHECK:     6: C c = C();
628*0a6a1f1dSLionel Sambuc // CHECK:     7: ~C() (Temporary object destructor)
629*0a6a1f1dSLionel Sambuc // CHECK:     8: c
630*0a6a1f1dSLionel Sambuc // CHECK:     9: [B4.8].operator bool
631*0a6a1f1dSLionel Sambuc // CHECK:    10: [B4.8]
632*0a6a1f1dSLionel Sambuc // CHECK:    11: [B4.10] (ImplicitCastExpr, UserDefinedConversion, _Bool)
633*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B4.11]
634*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B5
635*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B3 B2
636*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
637*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B1 B2 B3
638*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (ENTRY)]
639*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B3
640*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
641*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
642*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
643*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
644*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
645*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
646*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
647*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
648*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
649*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
650*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
651*0a6a1f1dSLionel Sambuc // CHECK:     1: D() (CXXConstructExpr, struct D)
652*0a6a1f1dSLionel Sambuc // CHECK:     2: [B3.1].operator bool
653*0a6a1f1dSLionel Sambuc // CHECK:     3: [B3.1]
654*0a6a1f1dSLionel Sambuc // CHECK:     4: [B3.3] (ImplicitCastExpr, UserDefinedConversion, _Bool)
655*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B3.4]
656*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B4
657*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
658*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
659*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B1 B2
660*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (ENTRY)]
661*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B3
662*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
663*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
664*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
665*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
666*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
667*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
668*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
669*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
670*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
671*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
672*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
673*0a6a1f1dSLionel Sambuc // CHECK:     1: D() (CXXConstructExpr, struct D)
674*0a6a1f1dSLionel Sambuc // CHECK:     2: [B3.1] (ImplicitCastExpr, NoOp, const struct D)
675*0a6a1f1dSLionel Sambuc // CHECK:     3: [B3.2]
676*0a6a1f1dSLionel Sambuc // CHECK:     4: [B3.3] (CXXConstructExpr, struct D)
677*0a6a1f1dSLionel Sambuc // CHECK:     5: D d = D();
678*0a6a1f1dSLionel Sambuc // CHECK:     6: d
679*0a6a1f1dSLionel Sambuc // CHECK:     7: [B3.6].operator bool
680*0a6a1f1dSLionel Sambuc // CHECK:     8: [B3.6]
681*0a6a1f1dSLionel Sambuc // CHECK:     9: [B3.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)
682*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B3.9]
683*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B4
684*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
685*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
686*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B1 B2
687f4a2713aSLionel Sambuc // CHECK:   [B14 (ENTRY)]
688f4a2713aSLionel Sambuc // CHECK:     Succs (1): B13
689f4a2713aSLionel Sambuc // CHECK:   [B1]
690f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
691f4a2713aSLionel Sambuc // CHECK:     2: int b;
692f4a2713aSLionel Sambuc // CHECK:     3: [B10.4].~A() (Implicit destructor)
693f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
694f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
695f4a2713aSLionel Sambuc // CHECK:   [B2]
696f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
697f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
698f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
699f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
700f4a2713aSLionel Sambuc // CHECK:   [B3]
701f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
702f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
703f4a2713aSLionel Sambuc // CHECK:     3: ~A() (Temporary object destructor)
704f4a2713aSLionel Sambuc // CHECK:     4: ~B() (Temporary object destructor)
705f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
706f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
707f4a2713aSLionel Sambuc // CHECK:   [B4]
708f4a2713aSLionel Sambuc // CHECK:     1: [B7.8] ? [B5.6] : [B6.15]
709f4a2713aSLionel Sambuc // CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
710f4a2713aSLionel Sambuc // CHECK:     3: [B4.2]
711f4a2713aSLionel Sambuc // CHECK:     4: [B7.3]([B4.3])
712*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.2]
713f4a2713aSLionel Sambuc // CHECK:     Preds (2): B5 B6
714*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B3 B2
715f4a2713aSLionel Sambuc // CHECK:   [B5]
716f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
717f4a2713aSLionel Sambuc // CHECK:     2: [B5.1] (BindTemporary)
718f4a2713aSLionel Sambuc // CHECK:     3: [B5.2] (ImplicitCastExpr, NoOp, const class A)
719f4a2713aSLionel Sambuc // CHECK:     4: [B5.3]
720f4a2713aSLionel Sambuc // CHECK:     5: [B5.4] (CXXConstructExpr, class A)
721f4a2713aSLionel Sambuc // CHECK:     6: [B5.5] (BindTemporary)
722f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
723f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
724f4a2713aSLionel Sambuc // CHECK:   [B6]
725f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
726f4a2713aSLionel Sambuc // CHECK:     2: [B6.1] (BindTemporary)
727f4a2713aSLionel Sambuc // CHECK:     3: [B6.2].operator A
728*0a6a1f1dSLionel Sambuc // CHECK:     4: [B6.2]
729f4a2713aSLionel Sambuc // CHECK:     5: [B6.4] (ImplicitCastExpr, UserDefinedConversion, class A)
730f4a2713aSLionel Sambuc // CHECK:     6: [B6.5] (BindTemporary)
731f4a2713aSLionel Sambuc // CHECK:     7: [B6.6] (ImplicitCastExpr, NoOp, const class A)
732f4a2713aSLionel Sambuc // CHECK:     8: [B6.7]
733f4a2713aSLionel Sambuc // CHECK:     9: [B6.8] (CXXConstructExpr, class A)
734f4a2713aSLionel Sambuc // CHECK:    10: [B6.9] (BindTemporary)
735f4a2713aSLionel Sambuc // CHECK:    11: A([B6.10]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
736f4a2713aSLionel Sambuc // CHECK:    12: [B6.11] (ImplicitCastExpr, NoOp, const class A)
737f4a2713aSLionel Sambuc // CHECK:    13: [B6.12]
738f4a2713aSLionel Sambuc // CHECK:    14: [B6.13] (CXXConstructExpr, class A)
739f4a2713aSLionel Sambuc // CHECK:    15: [B6.14] (BindTemporary)
740f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
741f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
742f4a2713aSLionel Sambuc // CHECK:   [B7]
743f4a2713aSLionel Sambuc // CHECK:     1: ~B() (Temporary object destructor)
744f4a2713aSLionel Sambuc // CHECK:     2: foo
745f4a2713aSLionel Sambuc // CHECK:     3: [B7.2] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
746f4a2713aSLionel Sambuc // CHECK:     4: B() (CXXConstructExpr, class B)
747f4a2713aSLionel Sambuc // CHECK:     5: [B7.4] (BindTemporary)
748*0a6a1f1dSLionel Sambuc // CHECK:     6: [B7.5].operator bool
749*0a6a1f1dSLionel Sambuc // CHECK:     7: [B7.5]
750f4a2713aSLionel Sambuc // CHECK:     8: [B7.7] (ImplicitCastExpr, UserDefinedConversion, _Bool)
751f4a2713aSLionel Sambuc // CHECK:     T: [B7.8] ? ... : ...
752f4a2713aSLionel Sambuc // CHECK:     Preds (2): B8 B9
753f4a2713aSLionel Sambuc // CHECK:     Succs (2): B5 B6
754f4a2713aSLionel Sambuc // CHECK:   [B8]
755f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
756f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
757f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
758f4a2713aSLionel Sambuc // CHECK:   [B9]
759f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
760f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
761f4a2713aSLionel Sambuc // CHECK:     3: ~B() (Temporary object destructor)
762f4a2713aSLionel Sambuc // CHECK:     Preds (1): B10
763f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
764f4a2713aSLionel Sambuc // CHECK:   [B10]
765f4a2713aSLionel Sambuc // CHECK:     1: [B13.5] ? [B11.6] : [B12.15]
766f4a2713aSLionel Sambuc // CHECK:     2: [B10.1] (ImplicitCastExpr, NoOp, const class A)
767f4a2713aSLionel Sambuc // CHECK:     3: [B10.2]
768*0a6a1f1dSLionel Sambuc // CHECK:     4: const A &a = B() ? A() : A(B());
769*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B12.2]
770f4a2713aSLionel Sambuc // CHECK:     Preds (2): B11 B12
771*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B9 B8
772f4a2713aSLionel Sambuc // CHECK:   [B11]
773f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
774f4a2713aSLionel Sambuc // CHECK:     2: [B11.1] (BindTemporary)
775f4a2713aSLionel Sambuc // CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
776f4a2713aSLionel Sambuc // CHECK:     4: [B11.3]
777f4a2713aSLionel Sambuc // CHECK:     5: [B11.4] (CXXConstructExpr, class A)
778f4a2713aSLionel Sambuc // CHECK:     6: [B11.5] (BindTemporary)
779f4a2713aSLionel Sambuc // CHECK:     Preds (1): B13
780f4a2713aSLionel Sambuc // CHECK:     Succs (1): B10
781f4a2713aSLionel Sambuc // CHECK:   [B12]
782f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
783f4a2713aSLionel Sambuc // CHECK:     2: [B12.1] (BindTemporary)
784f4a2713aSLionel Sambuc // CHECK:     3: [B12.2].operator A
785*0a6a1f1dSLionel Sambuc // CHECK:     4: [B12.2]
786f4a2713aSLionel Sambuc // CHECK:     5: [B12.4] (ImplicitCastExpr, UserDefinedConversion, class A)
787f4a2713aSLionel Sambuc // CHECK:     6: [B12.5] (BindTemporary)
788f4a2713aSLionel Sambuc // CHECK:     7: [B12.6] (ImplicitCastExpr, NoOp, const class A)
789f4a2713aSLionel Sambuc // CHECK:     8: [B12.7]
790f4a2713aSLionel Sambuc // CHECK:     9: [B12.8] (CXXConstructExpr, class A)
791f4a2713aSLionel Sambuc // CHECK:    10: [B12.9] (BindTemporary)
792f4a2713aSLionel Sambuc // CHECK:    11: A([B12.10]) (CXXFunctionalCastExpr, ConstructorConversion, class A)
793f4a2713aSLionel Sambuc // CHECK:    12: [B12.11] (ImplicitCastExpr, NoOp, const class A)
794f4a2713aSLionel Sambuc // CHECK:    13: [B12.12]
795f4a2713aSLionel Sambuc // CHECK:    14: [B12.13] (CXXConstructExpr, class A)
796f4a2713aSLionel Sambuc // CHECK:    15: [B12.14] (BindTemporary)
797f4a2713aSLionel Sambuc // CHECK:     Preds (1): B13
798f4a2713aSLionel Sambuc // CHECK:     Succs (1): B10
799f4a2713aSLionel Sambuc // CHECK:   [B13]
800f4a2713aSLionel Sambuc // CHECK:     1: B() (CXXConstructExpr, class B)
801f4a2713aSLionel Sambuc // CHECK:     2: [B13.1] (BindTemporary)
802*0a6a1f1dSLionel Sambuc // CHECK:     3: [B13.2].operator bool
803*0a6a1f1dSLionel Sambuc // CHECK:     4: [B13.2]
804f4a2713aSLionel Sambuc // CHECK:     5: [B13.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
805f4a2713aSLionel Sambuc // CHECK:     T: [B13.5] ? ... : ...
806f4a2713aSLionel Sambuc // CHECK:     Preds (1): B14
807f4a2713aSLionel Sambuc // CHECK:     Succs (2): B11 B12
808f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
809f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
810f4a2713aSLionel Sambuc // CHECK:   [B8 (ENTRY)]
811f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
812f4a2713aSLionel Sambuc // CHECK:   [B1]
813*0a6a1f1dSLionel Sambuc // CHECK:     1: int b;
814*0a6a1f1dSLionel Sambuc // CHECK:     2: [B4.5].~A() (Implicit destructor)
815f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
816f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
817f4a2713aSLionel Sambuc // CHECK:   [B2]
818f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
819f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
820f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
821f4a2713aSLionel Sambuc // CHECK:   [B3]
822f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
823f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
824f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
825f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
826f4a2713aSLionel Sambuc // CHECK:   [B4]
827f4a2713aSLionel Sambuc // CHECK:     1: [B7.2] ?: [B6.6]
828f4a2713aSLionel Sambuc // CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
829f4a2713aSLionel Sambuc // CHECK:     3: [B4.2]
830f4a2713aSLionel Sambuc // CHECK:     4: [B4.3] (CXXConstructExpr, class A)
831f4a2713aSLionel Sambuc // CHECK:     5: A a = A() ?: A();
832*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.2]
833f4a2713aSLionel Sambuc // CHECK:     Preds (2): B5 B6
834*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B3 B2
835f4a2713aSLionel Sambuc // CHECK:   [B5]
836f4a2713aSLionel Sambuc // CHECK:     1: [B7.2] (ImplicitCastExpr, NoOp, const class A)
837f4a2713aSLionel Sambuc // CHECK:     2: [B5.1]
838f4a2713aSLionel Sambuc // CHECK:     3: [B5.2] (CXXConstructExpr, class A)
839f4a2713aSLionel Sambuc // CHECK:     4: [B5.3] (BindTemporary)
840f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
841f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
842f4a2713aSLionel Sambuc // CHECK:   [B6]
843f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
844f4a2713aSLionel Sambuc // CHECK:     2: [B6.1] (BindTemporary)
845f4a2713aSLionel Sambuc // CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
846f4a2713aSLionel Sambuc // CHECK:     4: [B6.3]
847f4a2713aSLionel Sambuc // CHECK:     5: [B6.4] (CXXConstructExpr, class A)
848f4a2713aSLionel Sambuc // CHECK:     6: [B6.5] (BindTemporary)
849f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
850f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
851f4a2713aSLionel Sambuc // CHECK:   [B7]
852f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
853f4a2713aSLionel Sambuc // CHECK:     2: [B7.1] (BindTemporary)
854*0a6a1f1dSLionel Sambuc // CHECK:     3: [B7.2].operator bool
855*0a6a1f1dSLionel Sambuc // CHECK:     4: [B7.2]
856f4a2713aSLionel Sambuc // CHECK:     5: [B7.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
857f4a2713aSLionel Sambuc // CHECK:     T: [B7.5] ? ... : ...
858f4a2713aSLionel Sambuc // CHECK:     Preds (1): B8
859f4a2713aSLionel Sambuc // CHECK:     Succs (2): B5 B6
860f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
861f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
862f4a2713aSLionel Sambuc // CHECK:   [B13 (ENTRY)]
863f4a2713aSLionel Sambuc // CHECK:     Succs (1): B12
864f4a2713aSLionel Sambuc // CHECK:   [B1]
865*0a6a1f1dSLionel Sambuc // CHECK:     1: int b;
866*0a6a1f1dSLionel Sambuc // CHECK:     2: [B9.4].~A() (Implicit destructor)
867f4a2713aSLionel Sambuc // CHECK:     Preds (2): B2 B3
868f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
869f4a2713aSLionel Sambuc // CHECK:   [B2]
870f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
871f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
872f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
873f4a2713aSLionel Sambuc // CHECK:   [B3]
874f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
875f4a2713aSLionel Sambuc // CHECK:     2: ~A() (Temporary object destructor)
876f4a2713aSLionel Sambuc // CHECK:     Preds (1): B4
877f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
878f4a2713aSLionel Sambuc // CHECK:   [B4]
879*0a6a1f1dSLionel Sambuc // CHECK:     1: [B7.4] ?: [B6.6]
880f4a2713aSLionel Sambuc // CHECK:     2: [B4.1] (ImplicitCastExpr, NoOp, const class A)
881f4a2713aSLionel Sambuc // CHECK:     3: [B4.2]
882*0a6a1f1dSLionel Sambuc // CHECK:     4: [B7.2]([B4.3])
883*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.2]
884f4a2713aSLionel Sambuc // CHECK:     Preds (2): B5 B6
885*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B3 B2
886f4a2713aSLionel Sambuc // CHECK:   [B5]
887*0a6a1f1dSLionel Sambuc // CHECK:     1: [B7.4] (ImplicitCastExpr, NoOp, const class A)
888f4a2713aSLionel Sambuc // CHECK:     2: [B5.1]
889f4a2713aSLionel Sambuc // CHECK:     3: [B5.2] (CXXConstructExpr, class A)
890f4a2713aSLionel Sambuc // CHECK:     4: [B5.3] (BindTemporary)
891f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
892f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
893f4a2713aSLionel Sambuc // CHECK:   [B6]
894f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
895f4a2713aSLionel Sambuc // CHECK:     2: [B6.1] (BindTemporary)
896f4a2713aSLionel Sambuc // CHECK:     3: [B6.2] (ImplicitCastExpr, NoOp, const class A)
897f4a2713aSLionel Sambuc // CHECK:     4: [B6.3]
898f4a2713aSLionel Sambuc // CHECK:     5: [B6.4] (CXXConstructExpr, class A)
899f4a2713aSLionel Sambuc // CHECK:     6: [B6.5] (BindTemporary)
900f4a2713aSLionel Sambuc // CHECK:     Preds (1): B7
901f4a2713aSLionel Sambuc // CHECK:     Succs (1): B4
902f4a2713aSLionel Sambuc // CHECK:   [B7]
903*0a6a1f1dSLionel Sambuc // CHECK:     1: foo
904*0a6a1f1dSLionel Sambuc // CHECK:     2: [B7.1] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
905*0a6a1f1dSLionel Sambuc // CHECK:     3: A() (CXXConstructExpr, class A)
906*0a6a1f1dSLionel Sambuc // CHECK:     4: [B7.3] (BindTemporary)
907*0a6a1f1dSLionel Sambuc // CHECK:     5: [B7.4].operator bool
908*0a6a1f1dSLionel Sambuc // CHECK:     6: [B7.4]
909*0a6a1f1dSLionel Sambuc // CHECK:     7: [B7.6] (ImplicitCastExpr, UserDefinedConversion, _Bool)
910*0a6a1f1dSLionel Sambuc // CHECK:     T: [B7.7] ? ... : ...
911*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B8 B9
912f4a2713aSLionel Sambuc // CHECK:     Succs (2): B5 B6
913f4a2713aSLionel Sambuc // CHECK:   [B8]
914f4a2713aSLionel Sambuc // CHECK:     1: ~A() (Temporary object destructor)
915f4a2713aSLionel Sambuc // CHECK:     Preds (1): B9
916f4a2713aSLionel Sambuc // CHECK:     Succs (1): B7
917f4a2713aSLionel Sambuc // CHECK:   [B9]
918f4a2713aSLionel Sambuc // CHECK:     1: [B12.2] ?: [B11.6]
919f4a2713aSLionel Sambuc // CHECK:     2: [B9.1] (ImplicitCastExpr, NoOp, const class A)
920f4a2713aSLionel Sambuc // CHECK:     3: [B9.2]
921f4a2713aSLionel Sambuc // CHECK:     4: const A &a = A() ?: A();
922*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B11.2]
923f4a2713aSLionel Sambuc // CHECK:     Preds (2): B10 B11
924*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B8 B7
925f4a2713aSLionel Sambuc // CHECK:   [B10]
926f4a2713aSLionel Sambuc // CHECK:     1: [B12.2] (ImplicitCastExpr, NoOp, const class A)
927f4a2713aSLionel Sambuc // CHECK:     2: [B10.1]
928f4a2713aSLionel Sambuc // CHECK:     3: [B10.2] (CXXConstructExpr, class A)
929f4a2713aSLionel Sambuc // CHECK:     4: [B10.3] (BindTemporary)
930f4a2713aSLionel Sambuc // CHECK:     Preds (1): B12
931f4a2713aSLionel Sambuc // CHECK:     Succs (1): B9
932f4a2713aSLionel Sambuc // CHECK:   [B11]
933f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
934f4a2713aSLionel Sambuc // CHECK:     2: [B11.1] (BindTemporary)
935f4a2713aSLionel Sambuc // CHECK:     3: [B11.2] (ImplicitCastExpr, NoOp, const class A)
936f4a2713aSLionel Sambuc // CHECK:     4: [B11.3]
937f4a2713aSLionel Sambuc // CHECK:     5: [B11.4] (CXXConstructExpr, class A)
938f4a2713aSLionel Sambuc // CHECK:     6: [B11.5] (BindTemporary)
939f4a2713aSLionel Sambuc // CHECK:     Preds (1): B12
940f4a2713aSLionel Sambuc // CHECK:     Succs (1): B9
941f4a2713aSLionel Sambuc // CHECK:   [B12]
942f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
943f4a2713aSLionel Sambuc // CHECK:     2: [B12.1] (BindTemporary)
944*0a6a1f1dSLionel Sambuc // CHECK:     3: [B12.2].operator bool
945*0a6a1f1dSLionel Sambuc // CHECK:     4: [B12.2]
946f4a2713aSLionel Sambuc // CHECK:     5: [B12.4] (ImplicitCastExpr, UserDefinedConversion, _Bool)
947f4a2713aSLionel Sambuc // CHECK:     T: [B12.5] ? ... : ...
948f4a2713aSLionel Sambuc // CHECK:     Preds (1): B13
949f4a2713aSLionel Sambuc // CHECK:     Succs (2): B10 B11
950f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
951f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
952f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
953f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
954f4a2713aSLionel Sambuc // CHECK:   [B1]
955f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
956f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
957f4a2713aSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
958f4a2713aSLionel Sambuc // CHECK:     4: [B1.3]
959f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (CXXConstructExpr, class A)
960f4a2713aSLionel Sambuc // CHECK:     6: A a = A();
961f4a2713aSLionel Sambuc // CHECK:     7: ~A() (Temporary object destructor)
962f4a2713aSLionel Sambuc // CHECK:     8: int b;
963f4a2713aSLionel Sambuc // CHECK:     9: [B1.6].~A() (Implicit destructor)
964f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
965f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
966f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
967f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
968f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
969f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
970f4a2713aSLionel Sambuc // CHECK:   [B1]
971f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
972f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
973f4a2713aSLionel Sambuc // CHECK:     3: [B1.2] (ImplicitCastExpr, NoOp, const class A)
974f4a2713aSLionel Sambuc // CHECK:     4: [B1.3]
975f4a2713aSLionel Sambuc // CHECK:     5: const A &a = A();
976f4a2713aSLionel Sambuc // CHECK:     6: foo
977f4a2713aSLionel Sambuc // CHECK:     7: [B1.6] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
978f4a2713aSLionel Sambuc // CHECK:     8: A() (CXXConstructExpr, class A)
979f4a2713aSLionel Sambuc // CHECK:     9: [B1.8] (BindTemporary)
980f4a2713aSLionel Sambuc // CHECK:    10: [B1.9] (ImplicitCastExpr, NoOp, const class A)
981f4a2713aSLionel Sambuc // CHECK:    11: [B1.10]
982f4a2713aSLionel Sambuc // CHECK:    12: [B1.7]([B1.11])
983f4a2713aSLionel Sambuc // CHECK:    13: ~A() (Temporary object destructor)
984f4a2713aSLionel Sambuc // CHECK:    14: int b;
985f4a2713aSLionel Sambuc // CHECK:    15: [B1.5].~A() (Implicit destructor)
986f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
987f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
988f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
989f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
990f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
991f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
992f4a2713aSLionel Sambuc // CHECK:   [B1]
993f4a2713aSLionel Sambuc // CHECK:     1: A::make
994f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
995f4a2713aSLionel Sambuc // CHECK:     3: [B1.2]()
996f4a2713aSLionel Sambuc // CHECK:     4: [B1.3] (BindTemporary)
997f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
998f4a2713aSLionel Sambuc // CHECK:     6: [B1.5]
999f4a2713aSLionel Sambuc // CHECK:     7: [B1.6] (CXXConstructExpr, class A)
1000f4a2713aSLionel Sambuc // CHECK:     8: A a = A::make();
1001f4a2713aSLionel Sambuc // CHECK:     9: ~A() (Temporary object destructor)
1002f4a2713aSLionel Sambuc // CHECK:    10: int b;
1003f4a2713aSLionel Sambuc // CHECK:    11: [B1.8].~A() (Implicit destructor)
1004f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
1005f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1006f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1007f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
1008f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
1009f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
1010f4a2713aSLionel Sambuc // CHECK:   [B1]
1011f4a2713aSLionel Sambuc // CHECK:     1: A::make
1012f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
1013f4a2713aSLionel Sambuc // CHECK:     3: [B1.2]()
1014f4a2713aSLionel Sambuc // CHECK:     4: [B1.3] (BindTemporary)
1015f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (ImplicitCastExpr, NoOp, const class A)
1016f4a2713aSLionel Sambuc // CHECK:     6: [B1.5]
1017f4a2713aSLionel Sambuc // CHECK:     7: const A &a = A::make();
1018f4a2713aSLionel Sambuc // CHECK:     8: foo
1019f4a2713aSLionel Sambuc // CHECK:     9: [B1.8] (ImplicitCastExpr, FunctionToPointerDecay, void (*)(const class A &))
1020f4a2713aSLionel Sambuc // CHECK:    10: A::make
1021f4a2713aSLionel Sambuc // CHECK:    11: [B1.10] (ImplicitCastExpr, FunctionToPointerDecay, class A (*)(void))
1022f4a2713aSLionel Sambuc // CHECK:    12: [B1.11]()
1023f4a2713aSLionel Sambuc // CHECK:    13: [B1.12] (BindTemporary)
1024f4a2713aSLionel Sambuc // CHECK:    14: [B1.13] (ImplicitCastExpr, NoOp, const class A)
1025f4a2713aSLionel Sambuc // CHECK:    15: [B1.14]
1026f4a2713aSLionel Sambuc // CHECK:    16: [B1.9]([B1.15])
1027f4a2713aSLionel Sambuc // CHECK:    17: ~A() (Temporary object destructor)
1028f4a2713aSLionel Sambuc // CHECK:    18: int b;
1029f4a2713aSLionel Sambuc // CHECK:    19: [B1.7].~A() (Implicit destructor)
1030f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
1031f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1032f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1033f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
1034f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
1035f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
1036f4a2713aSLionel Sambuc // CHECK:   [B1]
1037f4a2713aSLionel Sambuc // CHECK:     1: int a;
1038f4a2713aSLionel Sambuc // CHECK:     2: A() (CXXConstructExpr, class A)
1039f4a2713aSLionel Sambuc // CHECK:     3: [B1.2] (BindTemporary)
1040f4a2713aSLionel Sambuc // CHECK:     4: [B1.3].operator int
1041*0a6a1f1dSLionel Sambuc // CHECK:     5: [B1.3]
1042f4a2713aSLionel Sambuc // CHECK:     6: [B1.5] (ImplicitCastExpr, UserDefinedConversion, int)
1043f4a2713aSLionel Sambuc // CHECK:     7: a
1044f4a2713aSLionel Sambuc // CHECK:     8: [B1.7] = [B1.6]
1045f4a2713aSLionel Sambuc // CHECK:     9: ~A() (Temporary object destructor)
1046f4a2713aSLionel Sambuc // CHECK:    10: int b;
1047f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
1048f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1049f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1050f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
1051f4a2713aSLionel Sambuc // CHECK:   [B2 (ENTRY)]
1052f4a2713aSLionel Sambuc // CHECK:     Succs (1): B1
1053f4a2713aSLionel Sambuc // CHECK:   [B1]
1054f4a2713aSLionel Sambuc // CHECK:     1: A() (CXXConstructExpr, class A)
1055f4a2713aSLionel Sambuc // CHECK:     2: [B1.1] (BindTemporary)
1056f4a2713aSLionel Sambuc // CHECK:     3: [B1.2].operator int
1057*0a6a1f1dSLionel Sambuc // CHECK:     4: [B1.2]
1058f4a2713aSLionel Sambuc // CHECK:     5: [B1.4] (ImplicitCastExpr, UserDefinedConversion, int)
1059f4a2713aSLionel Sambuc // CHECK:     6: int([B1.5]) (CXXFunctionalCastExpr, NoOp, int)
1060f4a2713aSLionel Sambuc // CHECK:     7: B() (CXXConstructExpr, class B)
1061f4a2713aSLionel Sambuc // CHECK:     8: [B1.7] (BindTemporary)
1062f4a2713aSLionel Sambuc // CHECK:     9: [B1.8].operator int
1063*0a6a1f1dSLionel Sambuc // CHECK:    10: [B1.8]
1064f4a2713aSLionel Sambuc // CHECK:    11: [B1.10] (ImplicitCastExpr, UserDefinedConversion, int)
1065f4a2713aSLionel Sambuc // CHECK:    12: int([B1.11]) (CXXFunctionalCastExpr, NoOp, int)
1066f4a2713aSLionel Sambuc // CHECK:    13: [B1.6] + [B1.12]
1067f4a2713aSLionel Sambuc // CHECK:    14: a([B1.13]) (Member initializer)
1068f4a2713aSLionel Sambuc // CHECK:    15: ~B() (Temporary object destructor)
1069f4a2713aSLionel Sambuc // CHECK:    16: ~A() (Temporary object destructor)
1070f4a2713aSLionel Sambuc // CHECK:    17: /*implicit*/int()
1071f4a2713aSLionel Sambuc // CHECK:    18: b([B1.17]) (Member initializer)
1072f4a2713aSLionel Sambuc // CHECK:     Preds (1): B2
1073f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1074f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1075f4a2713aSLionel Sambuc // CHECK:     Preds (1): B1
1076f4a2713aSLionel Sambuc // CHECK:   [B3 (ENTRY)]
1077f4a2713aSLionel Sambuc // CHECK:     Succs (1): B2
1078f4a2713aSLionel Sambuc // CHECK:   [B1]
1079f4a2713aSLionel Sambuc // CHECK:     1: int b;
1080*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2(Unreachable)
1081f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1082*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (NORETURN)]
1083f4a2713aSLionel Sambuc // CHECK:     1: int a;
1084f4a2713aSLionel Sambuc // CHECK:     2: NoReturn() (CXXConstructExpr, class NoReturn)
1085f4a2713aSLionel Sambuc // CHECK:     3: [B2.2] (BindTemporary)
1086f4a2713aSLionel Sambuc // CHECK:     4: [B2.3].f
1087f4a2713aSLionel Sambuc // CHECK:     5: [B2.4]()
1088f4a2713aSLionel Sambuc // CHECK:     6: ~NoReturn() (Temporary object destructor)
1089f4a2713aSLionel Sambuc // CHECK:     Preds (1): B3
1090f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1091f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1092f4a2713aSLionel Sambuc // CHECK:     Preds (2): B1 B2
1093f4a2713aSLionel Sambuc // CHECK:   [B3 (ENTRY)]
1094f4a2713aSLionel Sambuc // CHECK:     Succs (1): B2
1095f4a2713aSLionel Sambuc // CHECK:   [B1]
1096f4a2713aSLionel Sambuc // CHECK:     1: int b;
1097*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B2(Unreachable)
1098f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1099*0a6a1f1dSLionel Sambuc // CHECK:   [B2 (NORETURN)]
1100f4a2713aSLionel Sambuc // CHECK:     1: int a;
1101f4a2713aSLionel Sambuc // CHECK:     2: NoReturn() (CXXConstructExpr, class NoReturn)
1102f4a2713aSLionel Sambuc // CHECK:     3: [B2.2] (BindTemporary)
1103f4a2713aSLionel Sambuc // CHECK:     4: 47
1104f4a2713aSLionel Sambuc // CHECK:     5: ... , [B2.4]
1105f4a2713aSLionel Sambuc // CHECK:     6: ~NoReturn() (Temporary object destructor)
1106f4a2713aSLionel Sambuc // CHECK:     Preds (1): B3
1107f4a2713aSLionel Sambuc // CHECK:     Succs (1): B0
1108f4a2713aSLionel Sambuc // CHECK:   [B0 (EXIT)]
1109f4a2713aSLionel Sambuc // CHECK:     Preds (2): B1 B2
1110*0a6a1f1dSLionel Sambuc // CHECK:   [B9 (ENTRY)]
1111*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B8
1112*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
1113*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
1114*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
1115*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B3 B8
1116*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1117*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
1118*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
1119*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
1120*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
1121*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1122*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
1123*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B5.1]
1124*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B4(Unreachable) B5
1125*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
1126*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (NORETURN)]
1127*0a6a1f1dSLionel Sambuc // CHECK:     1: ~NoReturn() (Temporary object destructor)
1128*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B5
1129*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1130*0a6a1f1dSLionel Sambuc // CHECK:   [B5]
1131*0a6a1f1dSLionel Sambuc // CHECK:     1: [B7.3] || [B6.7]
1132*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.4]
1133*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B6 B7
1134*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B4 B3
1135*0a6a1f1dSLionel Sambuc // CHECK:   [B6]
1136*0a6a1f1dSLionel Sambuc // CHECK:     1: check
1137*0a6a1f1dSLionel Sambuc // CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
1138*0a6a1f1dSLionel Sambuc // CHECK:     3: NoReturn() (CXXConstructExpr, class NoReturn)
1139*0a6a1f1dSLionel Sambuc // CHECK:     4: [B6.3] (BindTemporary)
1140*0a6a1f1dSLionel Sambuc // CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
1141*0a6a1f1dSLionel Sambuc // CHECK:     6: [B6.5]
1142*0a6a1f1dSLionel Sambuc // CHECK:     7: [B6.2]([B6.6])
1143*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B7
1144*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B5
1145*0a6a1f1dSLionel Sambuc // CHECK:   [B7]
1146*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1147*0a6a1f1dSLionel Sambuc // CHECK:     2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1148*0a6a1f1dSLionel Sambuc // CHECK:     3: ![B7.2]
1149*0a6a1f1dSLionel Sambuc // CHECK:     T: [B7.3] || ...
1150*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B8
1151*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B5 B6
1152*0a6a1f1dSLionel Sambuc // CHECK:   [B8]
1153*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1154*0a6a1f1dSLionel Sambuc // CHECK:     2: [B8.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1155*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B8.2]
1156*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B9
1157*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B7 B1
1158*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
1159*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B1 B2 B4
1160*0a6a1f1dSLionel Sambuc // CHECK:   [B10 (ENTRY)]
1161*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B9
1162*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
1163*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
1164*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
1165*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B3 B9
1166*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1167*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
1168*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
1169*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
1170*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
1171*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1172*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
1173*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B5.1]
1174*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B4(Unreachable) B5
1175*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
1176*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (NORETURN)]
1177*0a6a1f1dSLionel Sambuc // CHECK:     1: ~NoReturn() (Temporary object destructor)
1178*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B5
1179*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1180*0a6a1f1dSLionel Sambuc // CHECK:   [B5]
1181*0a6a1f1dSLionel Sambuc // CHECK:     1: [B8.3] || [B7.3] || [B6.7]
1182*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.4]
1183*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B6 B7 B8
1184*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B4 B3
1185*0a6a1f1dSLionel Sambuc // CHECK:   [B6]
1186*0a6a1f1dSLionel Sambuc // CHECK:     1: check
1187*0a6a1f1dSLionel Sambuc // CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
1188*0a6a1f1dSLionel Sambuc // CHECK:     3: NoReturn() (CXXConstructExpr, class NoReturn)
1189*0a6a1f1dSLionel Sambuc // CHECK:     4: [B6.3] (BindTemporary)
1190*0a6a1f1dSLionel Sambuc // CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
1191*0a6a1f1dSLionel Sambuc // CHECK:     6: [B6.5]
1192*0a6a1f1dSLionel Sambuc // CHECK:     7: [B6.2]([B6.6])
1193*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B7
1194*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B5
1195*0a6a1f1dSLionel Sambuc // CHECK:   [B7]
1196*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1197*0a6a1f1dSLionel Sambuc // CHECK:     2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1198*0a6a1f1dSLionel Sambuc // CHECK:     3: ![B7.2]
1199*0a6a1f1dSLionel Sambuc // CHECK:     T: [B8.3] || [B7.3] || ...
1200*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B8
1201*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B5 B6
1202*0a6a1f1dSLionel Sambuc // CHECK:   [B8]
1203*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1204*0a6a1f1dSLionel Sambuc // CHECK:     2: [B8.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1205*0a6a1f1dSLionel Sambuc // CHECK:     3: ![B8.2]
1206*0a6a1f1dSLionel Sambuc // CHECK:     T: [B8.3] || ...
1207*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B9
1208*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B5 B7
1209*0a6a1f1dSLionel Sambuc // CHECK:   [B9]
1210*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1211*0a6a1f1dSLionel Sambuc // CHECK:     2: [B9.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1212*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B9.2]
1213*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B10
1214*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B8 B1
1215*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
1216*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B1 B2 B4
1217*0a6a1f1dSLionel Sambuc // CHECK:   [B10 (ENTRY)]
1218*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B9
1219*0a6a1f1dSLionel Sambuc // CHECK:   [B1]
1220*0a6a1f1dSLionel Sambuc // CHECK:     1: 0
1221*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B1.1];
1222*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B3 B9
1223*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1224*0a6a1f1dSLionel Sambuc // CHECK:   [B2]
1225*0a6a1f1dSLionel Sambuc // CHECK:     1: 1
1226*0a6a1f1dSLionel Sambuc // CHECK:     2: return [B2.1];
1227*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B3
1228*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1229*0a6a1f1dSLionel Sambuc // CHECK:   [B3]
1230*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B5.1]
1231*0a6a1f1dSLionel Sambuc // CHECK:     Preds (2): B4(Unreachable) B5
1232*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B2 B1
1233*0a6a1f1dSLionel Sambuc // CHECK:   [B4 (NORETURN)]
1234*0a6a1f1dSLionel Sambuc // CHECK:     1: ~NoReturn() (Temporary object destructor)
1235*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B5
1236*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B0
1237*0a6a1f1dSLionel Sambuc // CHECK:   [B5]
1238*0a6a1f1dSLionel Sambuc // CHECK:     1: [B8.3] || [B7.2] || [B6.7]
1239*0a6a1f1dSLionel Sambuc // CHECK:     T: (Temp Dtor) [B6.4]
1240*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B6 B7 B8
1241*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B4 B3
1242*0a6a1f1dSLionel Sambuc // CHECK:   [B6]
1243*0a6a1f1dSLionel Sambuc // CHECK:     1: check
1244*0a6a1f1dSLionel Sambuc // CHECK:     2: [B6.1] (ImplicitCastExpr, FunctionToPointerDecay, _Bool (*)(const class NoReturn &))
1245*0a6a1f1dSLionel Sambuc // CHECK:     3: NoReturn() (CXXConstructExpr, class NoReturn)
1246*0a6a1f1dSLionel Sambuc // CHECK:     4: [B6.3] (BindTemporary)
1247*0a6a1f1dSLionel Sambuc // CHECK:     5: [B6.4] (ImplicitCastExpr, NoOp, const class NoReturn)
1248*0a6a1f1dSLionel Sambuc // CHECK:     6: [B6.5]
1249*0a6a1f1dSLionel Sambuc // CHECK:     7: [B6.2]([B6.6])
1250*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B7
1251*0a6a1f1dSLionel Sambuc // CHECK:     Succs (1): B5
1252*0a6a1f1dSLionel Sambuc // CHECK:   [B7]
1253*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1254*0a6a1f1dSLionel Sambuc // CHECK:     2: [B7.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1255*0a6a1f1dSLionel Sambuc // CHECK:     T: [B8.3] || [B7.2] || ...
1256*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B8
1257*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B5 B6
1258*0a6a1f1dSLionel Sambuc // CHECK:   [B8]
1259*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1260*0a6a1f1dSLionel Sambuc // CHECK:     2: [B8.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1261*0a6a1f1dSLionel Sambuc // CHECK:     3: ![B8.2]
1262*0a6a1f1dSLionel Sambuc // CHECK:     T: [B8.3] || ...
1263*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B9
1264*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B5 B7
1265*0a6a1f1dSLionel Sambuc // CHECK:   [B9]
1266*0a6a1f1dSLionel Sambuc // CHECK:     1: value
1267*0a6a1f1dSLionel Sambuc // CHECK:     2: [B9.1] (ImplicitCastExpr, LValueToRValue, _Bool)
1268*0a6a1f1dSLionel Sambuc // CHECK:     T: if [B9.2]
1269*0a6a1f1dSLionel Sambuc // CHECK:     Preds (1): B10
1270*0a6a1f1dSLionel Sambuc // CHECK:     Succs (2): B8 B1
1271*0a6a1f1dSLionel Sambuc // CHECK:   [B0 (EXIT)]
1272*0a6a1f1dSLionel Sambuc // CHECK:     Preds (3): B1 B2 B4
1273