Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors -cfg-add-initializers %s 2>&1 | FileCheck %s
      2 // XPASS: *
      3 
      4 class A {
      5 public:
      6   A() {}
      7   ~A() {}
      8 
      9   static A make() { return A(); }
     10 
     11   operator bool() { return false; }
     12   operator int() { return 0; }
     13 };
     14 
     15 class B {
     16 public:
     17   B() {}
     18   ~B() {}
     19 
     20   operator bool() { return true; }
     21   operator int() { return 1; }
     22   operator A() { return A(); }
     23 };
     24 
     25 void foo(int);
     26 void foo(bool);
     27 void foo(const A&);
     28 
     29 void test_binary() {
     30   int a = int(A()) + int(B());
     31   foo(int(A()) + int(B()));
     32   int b;
     33 }
     34 
     35 void test_and() {
     36   bool a = A() && B();
     37   foo(A() && B());
     38   int b;
     39 }
     40 
     41 void test_or() {
     42   bool a = A() || B();
     43   foo(A() || B());
     44   int b;
     45 }
     46 
     47 void test_cond() {
     48   A a = B() ? A() : A(B());
     49   if (B()) { foo(0); } else { foo(0); }
     50   int b;
     51 }
     52 
     53 void test_cond_cref() {
     54   const A& a = B() ? A() : A(B());
     55   foo(B() ? A() : A(B()));
     56   int b;
     57 }
     58 
     59 void test_cond_implicit() {
     60   A a = A() ?: A();
     61   int b;
     62 }
     63 
     64 void test_cond_implicit_cref() {
     65   const A& a = A() ?: A();
     66   foo(A() ?: A());
     67   int b;
     68 }
     69 
     70 void test_copy_init() {
     71   A a = A();
     72   int b;
     73 }
     74 
     75 void test_cref_init() {
     76   const A& a = A();
     77   foo(A());
     78   int b;
     79 }
     80 
     81 void test_call_copy_init() {
     82   A a = A::make();
     83   int b;
     84 }
     85 
     86 void test_call_cref_init() {
     87   const A& a = A::make();
     88   foo(A::make());
     89   int b;
     90 }
     91 
     92 void test_assign() {
     93   int a;
     94   a = A();
     95   int b;
     96 }
     97 
     98 class TestCtorInits {
     99   int a;
    100   int b;
    101 public:
    102   TestCtorInits();
    103 };
    104 
    105 TestCtorInits::TestCtorInits()
    106   : a(int(A()) + int(B()))
    107   , b() {}
    108 
    109 // 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 ]
    166 // CHECK:       1: [B4.5] && [B5.4]
    167 // CHECK:       2: foo
    168 // CHECK:       3: [B3.2]
    169 // CHECK:       4: [B3.3]([B3.1])
    170 // CHECK:       T: [B4.5] && ...
    171 // 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]()
    179 // CHECK:       T: [B4.5] && ...
    180 // CHECK:     Predecessors (2): B6 B7
    181 // CHECK:     Successors (2): B5 B3
    182 // CHECK:  [ B5 ]
    183 // CHECK:       1: B()
    184 // CHECK:       2: [B5.1] (BindTemporary)
    185 // CHECK:       3: [B5.2].operator _Bool
    186 // CHECK:       4: [B5.3]()
    187 // CHECK:     Predecessors (1): B4
    188 // CHECK:     Successors (1): B3
    189 // CHECK:  [ B6 ]
    190 // CHECK:       1: ~B() (Temporary object destructor)
    191 // CHECK:     Predecessors (1): B7
    192 // CHECK:     Successors (1): B4
    193 // CHECK:  [ B7 ]
    194 // CHECK:       1: [B8.4] && [B9.4]
    195 // CHECK:       2: bool a = A().operator _Bool() && B().operator _Bool();
    196 // CHECK:       T: [B8.4] && ...
    197 // CHECK:     Predecessors (2): B9 B8
    198 // CHECK:     Successors (2): B6 B4
    199 // CHECK:  [ B8 ]
    200 // CHECK:       1: A()
    201 // CHECK:       2: [B8.1] (BindTemporary)
    202 // CHECK:       3: [B8.2].operator _Bool
    203 // CHECK:       4: [B8.3]()
    204 // CHECK:       T: [B8.4] && ...
    205 // CHECK:     Predecessors (1): B10
    206 // CHECK:     Successors (2): B9 B7
    207 // CHECK:  [ B9 ]
    208 // CHECK:       1: B()
    209 // CHECK:       2: [B9.1] (BindTemporary)
    210 // CHECK:       3: [B9.2].operator _Bool
    211 // CHECK:       4: [B9.3]()
    212 // CHECK:     Predecessors (1): B8
    213 // CHECK:     Successors (1): B7
    214 // CHECK:  [ B0 (EXIT) ]
    215 // CHECK:     Predecessors (1): B1
    216 // CHECK:     Successors (0):
    217 // CHECK:  [ B10 (ENTRY) ]
    218 // CHECK:     Predecessors (0):
    219 // CHECK:     Successors (1): B8
    220 // CHECK:  [ B1 ]
    221 // CHECK:       1: ~A() (Temporary object destructor)
    222 // CHECK:       2: int b;
    223 // CHECK:     Predecessors (2): B2 B3
    224 // CHECK:     Successors (1): B0
    225 // CHECK:  [ B2 ]
    226 // CHECK:       1: ~B() (Temporary object destructor)
    227 // CHECK:     Predecessors (1): B3
    228 // CHECK:     Successors (1): B1
    229 // CHECK:  [ B3 ]
    230 // CHECK:       1: [B4.5] || [B5.4]
    231 // CHECK:       2: foo
    232 // CHECK:       3: [B3.2]
    233 // CHECK:       4: [B3.3]([B3.1])
    234 // CHECK:       T: [B4.5] || ...
    235 // CHECK:     Predecessors (2): B5 B4
    236 // CHECK:     Successors (2): B1 B2
    237 // CHECK:  [ B4 ]
    238 // CHECK:       1: ~A() (Temporary object destructor)
    239 // CHECK:       2: A()
    240 // CHECK:       3: [B4.2] (BindTemporary)
    241 // CHECK:       4: [B4.3].operator _Bool
    242 // CHECK:       5: [B4.4]()
    243 // CHECK:       T: [B4.5] || ...
    244 // CHECK:     Predecessors (2): B6 B7
    245 // CHECK:     Successors (2): B3 B5
    246 // CHECK:  [ B5 ]
    247 // CHECK:       1: B()
    248 // CHECK:       2: [B5.1] (BindTemporary)
    249 // CHECK:       3: [B5.2].operator _Bool
    250 // CHECK:       4: [B5.3]()
    251 // CHECK:     Predecessors (1): B4
    252 // CHECK:     Successors (1): B3
    253 // CHECK:  [ B6 ]
    254 // CHECK:       1: ~B() (Temporary object destructor)
    255 // CHECK:     Predecessors (1): B7
    256 // CHECK:     Successors (1): B4
    257 // CHECK:  [ B7 ]
    258 // CHECK:       1: [B8.4] || [B9.4]
    259 // CHECK:       2: bool a = A().operator _Bool() || B().operator _Bool();
    260 // CHECK:       T: [B8.4] || ...
    261 // CHECK:     Predecessors (2): B9 B8
    262 // CHECK:     Successors (2): B4 B6
    263 // CHECK:  [ B8 ]
    264 // CHECK:       1: A()
    265 // CHECK:       2: [B8.1] (BindTemporary)
    266 // CHECK:       3: [B8.2].operator _Bool
    267 // CHECK:       4: [B8.3]()
    268 // CHECK:       T: [B8.4] || ...
    269 // CHECK:     Predecessors (1): B10
    270 // CHECK:     Successors (2): B7 B9
    271 // CHECK:  [ B9 ]
    272 // CHECK:       1: B()
    273 // CHECK:       2: [B9.1] (BindTemporary)
    274 // CHECK:       3: [B9.2].operator _Bool
    275 // CHECK:       4: [B9.3]()
    276 // CHECK:     Predecessors (1): B8
    277 // CHECK:     Successors (1): B7
    278 // CHECK:  [ B0 (EXIT) ]
    279 // CHECK:     Predecessors (1): B1
    280 // CHECK:     Successors (0):
    281 // CHECK:  [ B11 (ENTRY) ]
    282 // CHECK:     Predecessors (0):
    283 // CHECK:     Successors (1): B10
    284 // CHECK:  [ B1 ]
    285 // CHECK:       1: int b;
    286 // CHECK:       2: [B7.4].~A() (Implicit destructor)
    287 // CHECK:     Predecessors (2): B2 B3
    288 // CHECK:     Successors (1): B0
    289 // CHECK:  [ B2 ]
    290 // CHECK:       1: 0
    291 // CHECK:       2: foo
    292 // CHECK:       3: [B2.2]
    293 // CHECK:       4: [B2.3]([B2.1])
    294 // CHECK:     Predecessors (1): B4
    295 // CHECK:     Successors (1): B1
    296 // CHECK:  [ B3 ]
    297 // CHECK:       1: 0
    298 // CHECK:       2: foo
    299 // CHECK:       3: [B3.2]
    300 // CHECK:       4: [B3.3]([B3.1])
    301 // CHECK:     Predecessors (1): B4
    302 // CHECK:     Successors (1): B1
    303 // CHECK:  [ B4 ]
    304 // CHECK:       1: ~B() (Temporary object destructor)
    305 // CHECK:       2: B()
    306 // CHECK:       3: [B4.2] (BindTemporary)
    307 // CHECK:       4: [B4.3].operator _Bool
    308 // CHECK:       5: [B4.4]()
    309 // CHECK:       6: ~B() (Temporary object destructor)
    310 // CHECK:       T: if [B4.5]
    311 // CHECK:     Predecessors (2): B5 B6
    312 // CHECK:     Successors (2): B3 B2
    313 // CHECK:  [ B5 ]
    314 // CHECK:       1: ~A() (Temporary object destructor)
    315 // CHECK:       2: ~A() (Temporary object destructor)
    316 // CHECK:     Predecessors (1): B7
    317 // CHECK:     Successors (1): B4
    318 // CHECK:  [ B6 ]
    319 // CHECK:       1: ~A() (Temporary object destructor)
    320 // CHECK:       2: ~A() (Temporary object destructor)
    321 // CHECK:       3: ~A() (Temporary object destructor)
    322 // CHECK:       4: ~B() (Temporary object destructor)
    323 // CHECK:     Predecessors (1): B7
    324 // CHECK:     Successors (1): B4
    325 // CHECK:  [ B7 ]
    326 // CHECK:       1: [B10.4] ? [B8.5] : [B9.13]
    327 // CHECK:       2: [B7.1]
    328 // CHECK:       3: [B7.2]
    329 // CHECK:       4: A a = B().operator _Bool() ? A() : A(B().operator A());
    330 // CHECK:       T: [B10.4] ? ... : ...
    331 // CHECK:     Predecessors (2): B8 B9
    332 // CHECK:     Successors (2): B5 B6
    333 // CHECK:  [ B8 ]
    334 // CHECK:       1: A()
    335 // CHECK:       2: [B8.1] (BindTemporary)
    336 // CHECK:       3: [B8.2]
    337 // CHECK:       4: [B8.3]
    338 // CHECK:       5: [B8.4] (BindTemporary)
    339 // CHECK:     Predecessors (1): B10
    340 // CHECK:     Successors (1): B7
    341 // CHECK:  [ B9 ]
    342 // CHECK:       1: B()
    343 // CHECK:       2: [B9.1] (BindTemporary)
    344 // CHECK:       3: [B9.2].operator A
    345 // CHECK:       4: [B9.3]()
    346 // CHECK:       5: [B9.4] (BindTemporary)
    347 // CHECK:       6: [B9.5]
    348 // CHECK:       7: [B9.6]
    349 // CHECK:       8: [B9.7]
    350 // CHECK:       9: [B9.8] (BindTemporary)
    351 // CHECK:      10: A([B9.9])
    352 // CHECK:      11: [B9.10]
    353 // CHECK:      12: [B9.11]
    354 // CHECK:      13: [B9.12] (BindTemporary)
    355 // CHECK:     Predecessors (1): B10
    356 // CHECK:     Successors (1): B7
    357 // CHECK:  [ B10 ]
    358 // CHECK:       1: B()
    359 // CHECK:       2: [B10.1] (BindTemporary)
    360 // CHECK:       3: [B10.2].operator _Bool
    361 // CHECK:       4: [B10.3]()
    362 // CHECK:       T: [B10.4] ? ... : ...
    363 // CHECK:     Predecessors (1): B11
    364 // CHECK:     Successors (2): B8 B9
    365 // CHECK:  [ B0 (EXIT) ]
    366 // CHECK:     Predecessors (1): B1
    367 // CHECK:     Successors (0):
    368 // CHECK:  [ B14 (ENTRY) ]
    369 // CHECK:     Predecessors (0):
    370 // CHECK:     Successors (1): B13
    371 // CHECK:  [ B1 ]
    372 // CHECK:       1: ~B() (Temporary object destructor)
    373 // CHECK:       2: int b;
    374 // CHECK:       3: [B10.4].~A() (Implicit destructor)
    375 // CHECK:     Predecessors (2): B2 B3
    376 // CHECK:     Successors (1): B0
    377 // CHECK:  [ B2 ]
    378 // CHECK:       1: ~A() (Temporary object destructor)
    379 // CHECK:       2: ~A() (Temporary object destructor)
    380 // CHECK:     Predecessors (1): B4
    381 // CHECK:     Successors (1): B1
    382 // CHECK:  [ B3 ]
    383 // CHECK:       1: ~A() (Temporary object destructor)
    384 // CHECK:       2: ~A() (Temporary object destructor)
    385 // CHECK:       3: ~A() (Temporary object destructor)
    386 // CHECK:       4: ~B() (Temporary object destructor)
    387 // CHECK:     Predecessors (1): B4
    388 // CHECK:     Successors (1): B1
    389 // CHECK:  [ B4 ]
    390 // CHECK:       1: [B7.5] ? [B5.5] : [B6.13]
    391 // CHECK:       2: [B4.1]
    392 // CHECK:       3: [B4.2]
    393 // CHECK:       4: foo
    394 // CHECK:       5: [B4.4]
    395 // CHECK:       6: [B4.5]([B4.3])
    396 // CHECK:       T: [B7.5] ? ... : ...
    397 // CHECK:     Predecessors (2): B5 B6
    398 // CHECK:     Successors (2): B2 B3
    399 // CHECK:  [ B5 ]
    400 // CHECK:       1: A()
    401 // CHECK:       2: [B5.1] (BindTemporary)
    402 // CHECK:       3: [B5.2]
    403 // CHECK:       4: [B5.3]
    404 // CHECK:       5: [B5.4] (BindTemporary)
    405 // CHECK:     Predecessors (1): B7
    406 // CHECK:     Successors (1): B4
    407 // CHECK:  [ B6 ]
    408 // CHECK:       1: B()
    409 // CHECK:       2: [B6.1] (BindTemporary)
    410 // CHECK:       3: [B6.2].operator A
    411 // CHECK:       4: [B6.3]()
    412 // CHECK:       5: [B6.4] (BindTemporary)
    413 // CHECK:       6: [B6.5]
    414 // CHECK:       7: [B6.6]
    415 // CHECK:       8: [B6.7]
    416 // CHECK:       9: [B6.8] (BindTemporary)
    417 // CHECK:      10: A([B6.9])
    418 // CHECK:      11: [B6.10]
    419 // CHECK:      12: [B6.11]
    420 // CHECK:      13: [B6.12] (BindTemporary)
    421 // CHECK:     Predecessors (1): B7
    422 // CHECK:     Successors (1): B4
    423 // CHECK:  [ B7 ]
    424 // CHECK:       1: ~B() (Temporary object destructor)
    425 // CHECK:       2: B()
    426 // CHECK:       3: [B7.2] (BindTemporary)
    427 // CHECK:       4: [B7.3].operator _Bool
    428 // CHECK:       5: [B7.4]()
    429 // CHECK:       T: [B7.5] ? ... : ...
    430 // CHECK:     Predecessors (2): B8 B9
    431 // CHECK:     Successors (2): B5 B6
    432 // CHECK:  [ B8 ]
    433 // CHECK:       1: ~A() (Temporary object destructor)
    434 // CHECK:     Predecessors (1): B10
    435 // CHECK:     Successors (1): B7
    436 // CHECK:  [ B9 ]
    437 // CHECK:       1: ~A() (Temporary object destructor)
    438 // CHECK:       2: ~A() (Temporary object destructor)
    439 // CHECK:       3: ~B() (Temporary object destructor)
    440 // CHECK:     Predecessors (1): B10
    441 // CHECK:     Successors (1): B7
    442 // CHECK:  [ B10 ]
    443 // CHECK:       1: [B13.4] ? [B11.5] : [B12.13]
    444 // CHECK:       2: [B10.1]
    445 // CHECK:       3: [B10.2]
    446 // CHECK:       4: const A &a = B().operator _Bool() ? A() : A(B().operator A());
    447 // CHECK:       T: [B13.4] ? ... : ...
    448 // CHECK:     Predecessors (2): B11 B12
    449 // CHECK:     Successors (2): B8 B9
    450 // CHECK:  [ B11 ]
    451 // CHECK:       1: A()
    452 // CHECK:       2: [B11.1] (BindTemporary)
    453 // CHECK:       3: [B11.2]
    454 // CHECK:       4: [B11.3]
    455 // CHECK:       5: [B11.4] (BindTemporary)
    456 // CHECK:     Predecessors (1): B13
    457 // CHECK:     Successors (1): B10
    458 // CHECK:  [ B12 ]
    459 // CHECK:       1: B()
    460 // CHECK:       2: [B12.1] (BindTemporary)
    461 // CHECK:       3: [B12.2].operator A
    462 // CHECK:       4: [B12.3]()
    463 // CHECK:       5: [B12.4] (BindTemporary)
    464 // CHECK:       6: [B12.5]
    465 // CHECK:       7: [B12.6]
    466 // CHECK:       8: [B12.7]
    467 // CHECK:       9: [B12.8] (BindTemporary)
    468 // CHECK:      10: A([B12.9])
    469 // CHECK:      11: [B12.10]
    470 // CHECK:      12: [B12.11]
    471 // CHECK:      13: [B12.12] (BindTemporary)
    472 // CHECK:     Predecessors (1): B13
    473 // CHECK:     Successors (1): B10
    474 // CHECK:  [ B13 ]
    475 // CHECK:       1: B()
    476 // CHECK:       2: [B13.1] (BindTemporary)
    477 // CHECK:       3: [B13.2].operator _Bool
    478 // CHECK:       4: [B13.3]()
    479 // CHECK:       T: [B13.4] ? ... : ...
    480 // CHECK:     Predecessors (1): B14
    481 // CHECK:     Successors (2): B11 B12
    482 // CHECK:  [ B0 (EXIT) ]
    483 // CHECK:     Predecessors (1): B1
    484 // CHECK:     Successors (0):
    485 // CHECK:  [ B8 (ENTRY) ]
    486 // CHECK:     Predecessors (0):
    487 // CHECK:     Successors (1): B7
    488 // CHECK:  [ B1 ]
    489 // CHECK:       1: ~A() (Temporary object destructor)
    490 // CHECK:       2: int b;
    491 // CHECK:       3: [B4.4].~A() (Implicit destructor)
    492 // CHECK:     Predecessors (2): B2 B3
    493 // CHECK:     Successors (1): B0
    494 // CHECK:  [ B2 ]
    495 // CHECK:       1: ~A() (Temporary object destructor)
    496 // CHECK:     Predecessors (1): B4
    497 // CHECK:     Successors (1): B1
    498 // CHECK:  [ B3 ]
    499 // CHECK:       1: ~A() (Temporary object destructor)
    500 // CHECK:       2: ~A() (Temporary object destructor)
    501 // CHECK:     Predecessors (1): B4
    502 // CHECK:     Successors (1): B1
    503 // CHECK:  [ B4 ]
    504 // CHECK:       1: [B7.2] ?: [B6.5]
    505 // CHECK:       2: [B4.1]
    506 // CHECK:       3: [B4.2]
    507 // CHECK:       4: A a = A() ?: A();
    508 // CHECK:       T: [B7.5] ? ... : ...
    509 // CHECK:     Predecessors (2): B5 B6
    510 // CHECK:     Successors (2): B2 B3
    511 // CHECK:  [ B5 ]
    512 // CHECK:       1: [B7.3]
    513 // CHECK:       2: [B7.3]
    514 // CHECK:       3: [B5.2]
    515 // CHECK:       4: [B5.3]
    516 // CHECK:       5: [B5.4] (BindTemporary)
    517 // CHECK:     Predecessors (1): B7
    518 // CHECK:     Successors (1): B4
    519 // CHECK:  [ B6 ]
    520 // CHECK:       1: A()
    521 // CHECK:       2: [B6.1] (BindTemporary)
    522 // CHECK:       3: [B6.2]
    523 // CHECK:       4: [B6.3]
    524 // CHECK:       5: [B6.4] (BindTemporary)
    525 // CHECK:     Predecessors (1): B7
    526 // CHECK:     Successors (1): B4
    527 // CHECK:  [ B7 ]
    528 // CHECK:       1: A()
    529 // CHECK:       2: [B7.1] (BindTemporary)
    530 // CHECK:       3:
    531 // CHECK:       4: [B7.3].operator _Bool
    532 // CHECK:       5: [B7.4]()
    533 // CHECK:       T: [B7.5] ? ... : ...
    534 // CHECK:     Predecessors (1): B8
    535 // CHECK:     Successors (2): B5 B6
    536 // CHECK:  [ B0 (EXIT) ]
    537 // CHECK:     Predecessors (1): B1
    538 // CHECK:     Successors (0):
    539 // CHECK:  [ B13 (ENTRY) ]
    540 // CHECK:     Predecessors (0):
    541 // CHECK:     Successors (1): B12
    542 // CHECK:  [ B1 ]
    543 // CHECK:       1: ~A() (Temporary object destructor)
    544 // CHECK:       2: int b;
    545 // CHECK:       3: [B9.4].~A() (Implicit destructor)
    546 // CHECK:     Predecessors (2): B2 B3
    547 // CHECK:     Successors (1): B0
    548 // CHECK:  [ B2 ]
    549 // CHECK:       1: ~A() (Temporary object destructor)
    550 // CHECK:     Predecessors (1): B4
    551 // CHECK:     Successors (1): B1
    552 // CHECK:  [ B3 ]
    553 // CHECK:       1: ~A() (Temporary object destructor)
    554 // CHECK:       2: ~A() (Temporary object destructor)
    555 // CHECK:     Predecessors (1): B4
    556 // CHECK:     Successors (1): B1
    557 // CHECK:  [ B4 ]
    558 // CHECK:       1: [B7.3] ?: [B6.5]
    559 // CHECK:       2: [B4.1]
    560 // CHECK:       3: [B4.2]
    561 // CHECK:       4: foo
    562 // CHECK:       5: [B4.4]
    563 // CHECK:       6: [B4.5]([B4.3])
    564 // CHECK:       T: [B7.6] ? ... : ...
    565 // CHECK:     Predecessors (2): B5 B6
    566 // CHECK:     Successors (2): B2 B3
    567 // CHECK:  [ B5 ]
    568 // CHECK:       1: [B7.4]
    569 // CHECK:       2: [B7.4]
    570 // CHECK:       3: [B5.2]
    571 // CHECK:       4: [B5.3]
    572 // CHECK:       5: [B5.4] (BindTemporary)
    573 // CHECK:     Predecessors (1): B7
    574 // CHECK:     Successors (1): B4
    575 // CHECK:  [ B6 ]
    576 // CHECK:       1: A()
    577 // CHECK:       2: [B6.1] (BindTemporary)
    578 // CHECK:       3: [B6.2]
    579 // CHECK:       4: [B6.3]
    580 // CHECK:       5: [B6.4] (BindTemporary)
    581 // CHECK:     Predecessors (1): B7
    582 // CHECK:     Successors (1): B4
    583 // CHECK:  [ B7 ]
    584 // CHECK:       1: ~A() (Temporary object destructor)
    585 // CHECK:       2: A()
    586 // CHECK:       3: [B7.2] (BindTemporary)
    587 // CHECK:       4:
    588 // CHECK:       5: [B7.4].operator _Bool
    589 // CHECK:       6: [B7.5]()
    590 // CHECK:       T: [B7.6] ? ... : ...
    591 // CHECK:     Predecessors (2): B9 B8
    592 // CHECK:     Successors (2): B5 B6
    593 // CHECK:  [ B8 ]
    594 // CHECK:       1: ~A() (Temporary object destructor)
    595 // CHECK:     Predecessors (1): B9
    596 // CHECK:     Successors (1): B7
    597 // CHECK:  [ B9 ]
    598 // CHECK:       1: [B12.2] ?: [B11.5]
    599 // CHECK:       2: [B9.1]
    600 // CHECK:       3: [B9.2]
    601 // CHECK:       4: const A &a = A() ?: A();
    602 // CHECK:       T: [B12.5] ? ... : ...
    603 // CHECK:     Predecessors (2): B10 B11
    604 // CHECK:     Successors (2): B7 B8
    605 // CHECK:  [ B10 ]
    606 // CHECK:       1: [B12.3]
    607 // CHECK:       2: [B12.3]
    608 // CHECK:       3: [B10.2]
    609 // CHECK:       4: [B10.3]
    610 // CHECK:       5: [B10.4] (BindTemporary)
    611 // CHECK:     Predecessors (1): B12
    612 // CHECK:     Successors (1): B9
    613 // CHECK:  [ B11 ]
    614 // CHECK:       1: A()
    615 // CHECK:       2: [B11.1] (BindTemporary)
    616 // CHECK:       3: [B11.2]
    617 // CHECK:       4: [B11.3]
    618 // CHECK:       5: [B11.4] (BindTemporary)
    619 // CHECK:     Predecessors (1): B12
    620 // CHECK:     Successors (1): B9
    621 // CHECK:  [ B12 ]
    622 // CHECK:       1: A()
    623 // CHECK:       2: [B12.1] (BindTemporary)
    624 // CHECK:       3:
    625 // CHECK:       4: [B12.3].operator _Bool
    626 // CHECK:       5: [B12.4]()
    627 // CHECK:       T: [B12.5] ? ... : ...
    628 // CHECK:     Predecessors (1): B13
    629 // CHECK:     Successors (2): B10 B11
    630 // CHECK:  [ B0 (EXIT) ]
    631 // CHECK:     Predecessors (1): B1
    632 // CHECK:     Successors (0):
    633 // CHECK:  [ B2 (ENTRY) ]
    634 // CHECK:     Predecessors (0):
    635 // CHECK:     Successors (1): B1
    636 // CHECK:  [ B1 ]
    637 // CHECK:       1: A()
    638 // CHECK:       2: [B1.1] (BindTemporary)
    639 // CHECK:       3: [B1.2]
    640 // CHECK:       4: [B1.3]
    641 // CHECK:       5: A a = A();
    642 // CHECK:       6: ~A() (Temporary object destructor)
    643 // CHECK:       7: int b;
    644 // CHECK:       8: [B1.5].~A() (Implicit destructor)
    645 // CHECK:     Predecessors (1): B2
    646 // CHECK:     Successors (1): B0
    647 // CHECK:  [ B0 (EXIT) ]
    648 // CHECK:     Predecessors (1): B1
    649 // CHECK:     Successors (0):
    650 // CHECK:  [ B2 (ENTRY) ]
    651 // CHECK:     Predecessors (0):
    652 // CHECK:     Successors (1): B1
    653 // CHECK:  [ B1 ]
    654 // CHECK:       1: A()
    655 // CHECK:       2: [B1.1] (BindTemporary)
    656 // CHECK:       3: [B1.2]
    657 // CHECK:       4: [B1.3]
    658 // CHECK:       5: const A &a = A();
    659 // CHECK:       6: A()
    660 // CHECK:       7: [B1.6] (BindTemporary)
    661 // CHECK:       8: [B1.7]
    662 // CHECK:       9: [B1.8]
    663 // CHECK:      10: foo
    664 // CHECK:      11: [B1.10]
    665 // CHECK:      12: [B1.11]([B1.9])
    666 // CHECK:      13: ~A() (Temporary object destructor)
    667 // CHECK:      14: int b;
    668 // CHECK:      15: [B1.5].~A() (Implicit destructor)
    669 // CHECK:     Predecessors (1): B2
    670 // CHECK:     Successors (1): B0
    671 // CHECK:  [ B0 (EXIT) ]
    672 // CHECK:     Predecessors (1): B1
    673 // CHECK:     Successors (0):
    674 // CHECK:  [ B2 (ENTRY) ]
    675 // CHECK:     Predecessors (0):
    676 // CHECK:     Successors (1): B1
    677 // CHECK:  [ B1 ]
    678 // CHECK:       1: A::make
    679 // CHECK:       2: [B1.1]
    680 // CHECK:       3: [B1.2]()
    681 // CHECK:       4: [B1.3] (BindTemporary)
    682 // CHECK:       5: [B1.4]
    683 // CHECK:       6: [B1.5]
    684 // CHECK:       7: A a = A::make();
    685 // CHECK:       8: ~A() (Temporary object destructor)
    686 // CHECK:       9: int b;
    687 // CHECK:      10: [B1.7].~A() (Implicit destructor)
    688 // CHECK:     Predecessors (1): B2
    689 // CHECK:     Successors (1): B0
    690 // CHECK:  [ B0 (EXIT) ]
    691 // CHECK:     Predecessors (1): B1
    692 // CHECK:     Successors (0):
    693 // CHECK:  [ B2 (ENTRY) ]
    694 // CHECK:     Predecessors (0):
    695 // CHECK:     Successors (1): B1
    696 // CHECK:  [ B1 ]
    697 // CHECK:       1: A::make
    698 // CHECK:       2: [B1.1]
    699 // CHECK:       3: [B1.2]()
    700 // CHECK:       4: [B1.3] (BindTemporary)
    701 // CHECK:       5: [B1.4]
    702 // CHECK:       6: [B1.5]
    703 // CHECK:       7: const A &a = A::make();
    704 // CHECK:       8: A::make
    705 // CHECK:       9: [B1.8]
    706 // CHECK:      10: [B1.9]()
    707 // CHECK:      11: [B1.10] (BindTemporary)
    708 // CHECK:      12: [B1.11]
    709 // CHECK:      13: [B1.12]
    710 // CHECK:      14: foo
    711 // CHECK:      15: [B1.14]
    712 // CHECK:      16: [B1.15]([B1.13])
    713 // CHECK:      17: ~A() (Temporary object destructor)
    714 // CHECK:      18: int b;
    715 // CHECK:      19: [B1.7].~A() (Implicit destructor)
    716 // CHECK:     Predecessors (1): B2
    717 // CHECK:     Successors (1): B0
    718 // CHECK:  [ B0 (EXIT) ]
    719 // CHECK:     Predecessors (1): B1
    720 // CHECK:     Successors (0):
    721 // CHECK:  [ B2 (ENTRY) ]
    722 // CHECK:     Predecessors (0):
    723 // CHECK:     Successors (1): B1
    724 // CHECK:  [ B1 ]
    725 // CHECK:       1: int a;
    726 // CHECK:       2: A()
    727 // CHECK:       3: [B1.2] (BindTemporary)
    728 // CHECK:       4: [B1.3].operator int
    729 // CHECK:       5: [B1.4]()
    730 // CHECK:       6: a
    731 // CHECK:       7: [B1.6] = [B1.5]
    732 // CHECK:       8: ~A() (Temporary object destructor)
    733 // CHECK:       9: int b;
    734 // CHECK:     Predecessors (1): B2
    735 // CHECK:     Successors (1): B0
    736 // CHECK:  [ B0 (EXIT) ]
    737 // CHECK:     Predecessors (1): B1
    738 // CHECK:     Successors (0):
    739 // CHECK:  [ B2 (ENTRY) ]
    740 // CHECK:     Predecessors (0):
    741 // CHECK:     Successors (1): B1
    742 // CHECK:  [ B1 ]
    743 // CHECK:       1: A()
    744 // CHECK:       2: [B1.1] (BindTemporary)
    745 // CHECK:       3: [B1.2].operator int
    746 // CHECK:       4: [B1.3]()
    747 // CHECK:       5: [B1.4]
    748 // CHECK:       6: int([B1.5])
    749 // CHECK:       7: B()
    750 // CHECK:       8: [B1.7] (BindTemporary)
    751 // CHECK:       9: [B1.8].operator int
    752 // CHECK:      10: [B1.9]()
    753 // CHECK:      11: [B1.10]
    754 // CHECK:      12: int([B1.11])
    755 // CHECK:      13: [B1.6] + [B1.12]
    756 // CHECK:      14: a([B1.13]) (Member initializer)
    757 // CHECK:      15: ~B() (Temporary object destructor)
    758 // CHECK:      16: ~A() (Temporary object destructor)
    759 // CHECK:      17: /*implicit*/int()
    760 // CHECK:      18: b([B1.17]) (Member initializer)
    761 // CHECK:     Predecessors (1): B2
    762 // CHECK:     Successors (1): B0
    763 // CHECK:  [ B0 (EXIT) ]
    764 // CHECK:     Predecessors (1): B1
    765 // CHECK:     Successors (0):
    766 
    767