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