auto-obj-dtors-cfg-output.cpp revision 47575f1f775f5f250be4f395fa694a7274a65f33
1// RUN: %clang_cc1 -analyze -cfg-dump -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s 2// XPASS: * 3 4class A { 5public: 6 A() {} 7 ~A() {} 8 operator int() const { return 1; } 9}; 10 11extern const bool UV; 12 13void test_const_ref() { 14 A a; 15 const A& b = a; 16 const A& c = A(); 17} 18 19void test_scope() { 20 A a; 21 { A c; 22 A d; 23 } 24 A b; 25} 26 27void test_return() { 28 A a; 29 A b; 30 if (UV) return; 31 A c; 32} 33 34void test_goto() { 35 A a; 36l0: 37 A b; 38 { A a; 39 if (UV) goto l0; 40 if (UV) goto l1; 41 A b; 42 } 43l1: 44 A c; 45} 46 47void test_if_implicit_scope() { 48 A a; 49 if (A b = a) 50 A c; 51 else A c; 52} 53 54void test_if_jumps() { 55 A a; 56 if (A b = a) { 57 A c; 58 if (UV) return; 59 A d; 60 } else { 61 A c; 62 if (UV) return; 63 A d; 64 } 65 A e; 66} 67 68void test_while_implicit_scope() { 69 A a; 70 while (A b = a) 71 A c; 72} 73 74void test_while_jumps() { 75 A a; 76 while (A b = a) { 77 A c; 78 if (UV) break; 79 if (UV) continue; 80 if (UV) return; 81 A d; 82 } 83 A e; 84} 85 86void test_do_implicit_scope() { 87 do A a; 88 while (UV); 89} 90 91void test_do_jumps() { 92 A a; 93 do { 94 A b; 95 if (UV) break; 96 if (UV) continue; 97 if (UV) return; 98 A c; 99 } while (UV); 100 A d; 101} 102 103void test_switch_implicit_scope() { 104 A a; 105 switch (A b = a) 106 A c; 107} 108 109void test_switch_jumps() { 110 A a; 111 switch (A b = a) { 112 case 0: { 113 A c; 114 if (UV) break; 115 if (UV) return; 116 A f; 117 } 118 case 1: 119 break; 120 } 121 A g; 122} 123 124void test_for_implicit_scope() { 125 for (A a; A b = a; ) 126 A c; 127} 128 129void test_for_jumps() { 130 A a; 131 for (A b; A c = b; ) { 132 A d; 133 if (UV) break; 134 if (UV) continue; 135 if (UV) return; 136 A e; 137 } 138 A f; 139} 140 141// CHECK: [ B2 (ENTRY) ] 142// CHECK: Predecessors (0): 143// CHECK: Successors (1): B1 144// CHECK: [ B1 ] 145// CHECK: 1: A a; 146// CHECK: 2: const A &b = a; 147// CHECK: 3: const A &c = A(); 148// CHECK: 4: [B1.3].~A() (Implicit destructor) 149// CHECK: 5: [B1.1].~A() (Implicit destructor) 150// CHECK: Predecessors (1): B2 151// CHECK: Successors (1): B0 152// CHECK: [ B0 (EXIT) ] 153// CHECK: Predecessors (1): B1 154// CHECK: Successors (0): 155// CHECK: [ B2 (ENTRY) ] 156// CHECK: Predecessors (0): 157// CHECK: Successors (1): B1 158// CHECK: [ B1 ] 159// CHECK: 1: A a; 160// CHECK: 2: A c; 161// CHECK: 3: A d; 162// CHECK: 4: [B1.3].~A() (Implicit destructor) 163// CHECK: 5: [B1.2].~A() (Implicit destructor) 164// CHECK: 6: A b; 165// CHECK: 7: [B1.6].~A() (Implicit destructor) 166// CHECK: 8: [B1.1].~A() (Implicit destructor) 167// CHECK: Predecessors (1): B2 168// CHECK: Successors (1): B0 169// CHECK: [ B0 (EXIT) ] 170// CHECK: Predecessors (1): B1 171// CHECK: Successors (0): 172// CHECK: [ B4 (ENTRY) ] 173// CHECK: Predecessors (0): 174// CHECK: Successors (1): B3 175// CHECK: [ B1 ] 176// CHECK: 1: A c; 177// CHECK: 2: [B1.1].~A() (Implicit destructor) 178// CHECK: 3: [B3.2].~A() (Implicit destructor) 179// CHECK: 4: [B3.1].~A() (Implicit destructor) 180// CHECK: Predecessors (1): B3 181// CHECK: Successors (1): B0 182// CHECK: [ B2 ] 183// CHECK: 1: return; 184// CHECK: 2: [B3.2].~A() (Implicit destructor) 185// CHECK: 3: [B3.1].~A() (Implicit destructor) 186// CHECK: Predecessors (1): B3 187// CHECK: Successors (1): B0 188// CHECK: [ B3 ] 189// CHECK: 1: A a; 190// CHECK: 2: A b; 191// CHECK: 3: UV 192// CHECK: T: if [B3.3] 193// CHECK: Predecessors (1): B4 194// CHECK: Successors (2): B2 B1 195// CHECK: [ B0 (EXIT) ] 196// CHECK: Predecessors (2): B1 B2 197// CHECK: Successors (0): 198// CHECK: [ B8 (ENTRY) ] 199// CHECK: Predecessors (0): 200// CHECK: Successors (1): B7 201// CHECK: [ B1 ] 202// CHECK: l1: 203// CHECK: 1: A c; 204// CHECK: 2: [B1.1].~A() (Implicit destructor) 205// CHECK: 3: [B6.1].~A() (Implicit destructor) 206// CHECK: 4: [B7.1].~A() (Implicit destructor) 207// CHECK: Predecessors (2): B2 B3 208// CHECK: Successors (1): B0 209// CHECK: [ B2 ] 210// CHECK: 1: A b; 211// CHECK: 2: [B2.1].~A() (Implicit destructor) 212// CHECK: 3: [B6.2].~A() (Implicit destructor) 213// CHECK: Predecessors (1): B4 214// CHECK: Successors (1): B1 215// CHECK: [ B3 ] 216// CHECK: 1: [B6.2].~A() (Implicit destructor) 217// CHECK: T: goto l1; 218// CHECK: Predecessors (1): B4 219// CHECK: Successors (1): B1 220// CHECK: [ B4 ] 221// CHECK: 1: UV 222// CHECK: T: if [B4.1] 223// CHECK: Predecessors (1): B6 224// CHECK: Successors (2): B3 B2 225// CHECK: [ B5 ] 226// CHECK: 1: [B6.2].~A() (Implicit destructor) 227// CHECK: 2: [B6.1].~A() (Implicit destructor) 228// CHECK: T: goto l0; 229// CHECK: Predecessors (1): B6 230// CHECK: Successors (1): B6 231// CHECK: [ B6 ] 232// CHECK: l0: 233// CHECK: 1: A b; 234// CHECK: 2: A a; 235// CHECK: 3: UV 236// CHECK: T: if [B6.3] 237// CHECK: Predecessors (2): B7 B5 238// CHECK: Successors (2): B5 B4 239// CHECK: [ B7 ] 240// CHECK: 1: A a; 241// CHECK: Predecessors (1): B8 242// CHECK: Successors (1): B6 243// CHECK: [ B0 (EXIT) ] 244// CHECK: Predecessors (1): B1 245// CHECK: Successors (0): 246// CHECK: [ B5 (ENTRY) ] 247// CHECK: Predecessors (0): 248// CHECK: Successors (1): B4 249// CHECK: [ B1 ] 250// CHECK: 1: [B4.3].~A() (Implicit destructor) 251// CHECK: 2: [B4.1].~A() (Implicit destructor) 252// CHECK: Predecessors (2): B2 B3 253// CHECK: Successors (1): B0 254// CHECK: [ B2 ] 255// CHECK: 1: A c; 256// CHECK: 2: [B2.1].~A() (Implicit destructor) 257// CHECK: Predecessors (1): B4 258// CHECK: Successors (1): B1 259// CHECK: [ B3 ] 260// CHECK: 1: A c; 261// CHECK: 2: [B3.1].~A() (Implicit destructor) 262// CHECK: Predecessors (1): B4 263// CHECK: Successors (1): B1 264// CHECK: [ B4 ] 265// CHECK: 1: A a; 266// CHECK: 2: a 267// CHECK: 3: if ([B4.5]) 268// CHECK: [B3.1]else 269// CHECK: [B2.1] 4: b.operator int() 270// CHECK: 5: [B4.4] 271// CHECK: T: if [B4.5] 272// CHECK: Predecessors (1): B5 273// CHECK: Successors (2): B3 B2 274// CHECK: [ B0 (EXIT) ] 275// CHECK: Predecessors (1): B1 276// CHECK: Successors (0): 277// CHECK: [ B9 (ENTRY) ] 278// CHECK: Predecessors (0): 279// CHECK: Successors (1): B8 280// CHECK: [ B1 ] 281// CHECK: 1: [B8.3].~A() (Implicit destructor) 282// CHECK: 2: A e; 283// CHECK: 3: [B1.2].~A() (Implicit destructor) 284// CHECK: 4: [B8.1].~A() (Implicit destructor) 285// CHECK: Predecessors (2): B2 B5 286// CHECK: Successors (1): B0 287// CHECK: [ B2 ] 288// CHECK: 1: A d; 289// CHECK: 2: [B2.1].~A() (Implicit destructor) 290// CHECK: 3: [B4.1].~A() (Implicit destructor) 291// CHECK: Predecessors (1): B4 292// CHECK: Successors (1): B1 293// CHECK: [ B3 ] 294// CHECK: 1: return; 295// CHECK: 2: [B4.1].~A() (Implicit destructor) 296// CHECK: 3: [B8.3].~A() (Implicit destructor) 297// CHECK: 4: [B8.1].~A() (Implicit destructor) 298// CHECK: Predecessors (1): B4 299// CHECK: Successors (1): B0 300// CHECK: [ B4 ] 301// CHECK: 1: A c; 302// CHECK: 2: UV 303// CHECK: T: if [B4.2] 304// CHECK: Predecessors (1): B8 305// CHECK: Successors (2): B3 B2 306// CHECK: [ B5 ] 307// CHECK: 1: A d; 308// CHECK: 2: [B5.1].~A() (Implicit destructor) 309// CHECK: 3: [B7.1].~A() (Implicit destructor) 310// CHECK: Predecessors (1): B7 311// CHECK: Successors (1): B1 312// CHECK: [ B6 ] 313// CHECK: 1: return; 314// CHECK: 2: [B7.1].~A() (Implicit destructor) 315// CHECK: 3: [B8.3].~A() (Implicit destructor) 316// CHECK: 4: [B8.1].~A() (Implicit destructor) 317// CHECK: Predecessors (1): B7 318// CHECK: Successors (1): B0 319// CHECK: [ B7 ] 320// CHECK: 1: A c; 321// CHECK: 2: UV 322// CHECK: T: if [B7.2] 323// CHECK: Predecessors (1): B8 324// CHECK: Successors (2): B6 B5 325// CHECK: [ B8 ] 326// CHECK: 1: A a; 327// CHECK: 2: a 328// CHECK: 3: if ([B8.5]) { 329// CHECK: [B7.1] if ([B7.2]) 330// CHECK: [B6.1][B5.1]} else { 331// CHECK: [B4.1] if ([B4.2]) 332// CHECK: [B3.1][B2.1]} 333// CHECK: 4: b.operator int() 334// CHECK: 5: [B8.4] 335// CHECK: T: if [B8.5] 336// CHECK: Predecessors (1): B9 337// CHECK: Successors (2): B7 B4 338// CHECK: [ B0 (EXIT) ] 339// CHECK: Predecessors (3): B1 B3 B6 340// CHECK: Successors (0): 341// CHECK: [ B6 (ENTRY) ] 342// CHECK: Predecessors (0): 343// CHECK: Successors (1): B5 344// CHECK: [ B1 ] 345// CHECK: 1: [B2.2].~A() (Implicit destructor) 346// CHECK: 2: [B5.1].~A() (Implicit destructor) 347// CHECK: Predecessors (1): B2 348// CHECK: Successors (1): B0 349// CHECK: [ B2 ] 350// CHECK: 1: a 351// CHECK: 2: while ([B2.4]) 352// CHECK: [B4.1] 3: b.operator int() 353// CHECK: 4: [B2.3] 354// CHECK: T: while [B2.4] 355// CHECK: Predecessors (2): B3 B5 356// CHECK: Successors (2): B4 B1 357// CHECK: [ B3 ] 358// CHECK: Predecessors (1): B4 359// CHECK: Successors (1): B2 360// CHECK: [ B4 ] 361// CHECK: 1: A c; 362// CHECK: 2: [B4.1].~A() (Implicit destructor) 363// CHECK: 3: [B2.2].~A() (Implicit destructor) 364// CHECK: Predecessors (1): B2 365// CHECK: Successors (1): B3 366// CHECK: [ B5 ] 367// CHECK: 1: A a; 368// CHECK: Predecessors (1): B6 369// CHECK: Successors (1): B2 370// CHECK: [ B0 (EXIT) ] 371// CHECK: Predecessors (1): B1 372// CHECK: Successors (0): 373// CHECK: [ B12 (ENTRY) ] 374// CHECK: Predecessors (0): 375// CHECK: Successors (1): B11 376// CHECK: [ B1 ] 377// CHECK: 1: [B2.2].~A() (Implicit destructor) 378// CHECK: 2: A e; 379// CHECK: 3: [B1.2].~A() (Implicit destructor) 380// CHECK: 4: [B11.1].~A() (Implicit destructor) 381// CHECK: Predecessors (2): B9 B2 382// CHECK: Successors (1): B0 383// CHECK: [ B2 ] 384// CHECK: 1: a 385// CHECK: 2: while ([B2.4]) 386// CHECK: { 387// CHECK: [B10.1] if ([B10.2]) 388// CHECK: break; 389// CHECK: if ([B8.1]) 390// CHECK: continue; 391// CHECK: if ([B6.1]) 392// CHECK: [B5.1][B4.1] } 393// CHECK: 3: b.operator int() 394// CHECK: 4: [B2.3] 395// CHECK: T: while [B2.4] 396// CHECK: Predecessors (2): B3 B11 397// CHECK: Successors (2): B10 B1 398// CHECK: [ B3 ] 399// CHECK: Predecessors (2): B4 B7 400// CHECK: Successors (1): B2 401// CHECK: [ B4 ] 402// CHECK: 1: A d; 403// CHECK: 2: [B4.1].~A() (Implicit destructor) 404// CHECK: 3: [B10.1].~A() (Implicit destructor) 405// CHECK: 4: [B2.2].~A() (Implicit destructor) 406// CHECK: Predecessors (1): B6 407// CHECK: Successors (1): B3 408// CHECK: [ B5 ] 409// CHECK: 1: return; 410// CHECK: 2: [B10.1].~A() (Implicit destructor) 411// CHECK: 3: [B2.2].~A() (Implicit destructor) 412// CHECK: 4: [B11.1].~A() (Implicit destructor) 413// CHECK: Predecessors (1): B6 414// CHECK: Successors (1): B0 415// CHECK: [ B6 ] 416// CHECK: 1: UV 417// CHECK: T: if [B6.1] 418// CHECK: Predecessors (1): B8 419// CHECK: Successors (2): B5 B4 420// CHECK: [ B7 ] 421// CHECK: 1: [B10.1].~A() (Implicit destructor) 422// CHECK: 2: [B2.2].~A() (Implicit destructor) 423// CHECK: T: continue; 424// CHECK: Predecessors (1): B8 425// CHECK: Successors (1): B3 426// CHECK: [ B8 ] 427// CHECK: 1: UV 428// CHECK: T: if [B8.1] 429// CHECK: Predecessors (1): B10 430// CHECK: Successors (2): B7 B6 431// CHECK: [ B9 ] 432// CHECK: 1: [B10.1].~A() (Implicit destructor) 433// CHECK: T: break; 434// CHECK: Predecessors (1): B10 435// CHECK: Successors (1): B1 436// CHECK: [ B10 ] 437// CHECK: 1: A c; 438// CHECK: 2: UV 439// CHECK: T: if [B10.2] 440// CHECK: Predecessors (1): B2 441// CHECK: Successors (2): B9 B8 442// CHECK: [ B11 ] 443// CHECK: 1: A a; 444// CHECK: Predecessors (1): B12 445// CHECK: Successors (1): B2 446// CHECK: [ B0 (EXIT) ] 447// CHECK: Predecessors (2): B1 B5 448// CHECK: Successors (0): 449// CHECK: [ B4 (ENTRY) ] 450// CHECK: Predecessors (0): 451// CHECK: Successors (1): B2 452// CHECK: [ B1 ] 453// CHECK: 1: UV 454// CHECK: T: do ... while [B1.1] 455// CHECK: Predecessors (1): B2 456// CHECK: Successors (2): B3 B0 457// CHECK: [ B2 ] 458// CHECK: 1: A a; 459// CHECK: 2: [B2.1].~A() (Implicit destructor) 460// CHECK: Predecessors (2): B3 B4 461// CHECK: Successors (1): B1 462// CHECK: [ B3 ] 463// CHECK: Predecessors (1): B1 464// CHECK: Successors (1): B2 465// CHECK: [ B0 (EXIT) ] 466// CHECK: Predecessors (1): B1 467// CHECK: Successors (0): 468// CHECK: [ B12 (ENTRY) ] 469// CHECK: Predecessors (0): 470// CHECK: Successors (1): B11 471// CHECK: [ B1 ] 472// CHECK: 1: A d; 473// CHECK: 2: [B1.1].~A() (Implicit destructor) 474// CHECK: 3: [B11.1].~A() (Implicit destructor) 475// CHECK: Predecessors (2): B8 B2 476// CHECK: Successors (1): B0 477// CHECK: [ B2 ] 478// CHECK: 1: UV 479// CHECK: T: do ... while [B2.1] 480// CHECK: Predecessors (2): B3 B6 481// CHECK: Successors (2): B10 B1 482// CHECK: [ B3 ] 483// CHECK: 1: A c; 484// CHECK: 2: [B3.1].~A() (Implicit destructor) 485// CHECK: 3: [B9.1].~A() (Implicit destructor) 486// CHECK: Predecessors (1): B5 487// CHECK: Successors (1): B2 488// CHECK: [ B4 ] 489// CHECK: 1: return; 490// CHECK: 2: [B9.1].~A() (Implicit destructor) 491// CHECK: 3: [B11.1].~A() (Implicit destructor) 492// CHECK: Predecessors (1): B5 493// CHECK: Successors (1): B0 494// CHECK: [ B5 ] 495// CHECK: 1: UV 496// CHECK: T: if [B5.1] 497// CHECK: Predecessors (1): B7 498// CHECK: Successors (2): B4 B3 499// CHECK: [ B6 ] 500// CHECK: 1: [B9.1].~A() (Implicit destructor) 501// CHECK: T: continue; 502// CHECK: Predecessors (1): B7 503// CHECK: Successors (1): B2 504// CHECK: [ B7 ] 505// CHECK: 1: UV 506// CHECK: T: if [B7.1] 507// CHECK: Predecessors (1): B9 508// CHECK: Successors (2): B6 B5 509// CHECK: [ B8 ] 510// CHECK: 1: [B9.1].~A() (Implicit destructor) 511// CHECK: T: break; 512// CHECK: Predecessors (1): B9 513// CHECK: Successors (1): B1 514// CHECK: [ B9 ] 515// CHECK: 1: A b; 516// CHECK: 2: UV 517// CHECK: T: if [B9.2] 518// CHECK: Predecessors (2): B10 B11 519// CHECK: Successors (2): B8 B7 520// CHECK: [ B10 ] 521// CHECK: Predecessors (1): B2 522// CHECK: Successors (1): B9 523// CHECK: [ B11 ] 524// CHECK: 1: A a; 525// CHECK: Predecessors (1): B12 526// CHECK: Successors (1): B9 527// CHECK: [ B0 (EXIT) ] 528// CHECK: Predecessors (2): B1 B4 529// CHECK: Successors (0): 530// CHECK: [ B4 (ENTRY) ] 531// CHECK: Predecessors (0): 532// CHECK: Successors (1): B2 533// CHECK: [ B1 ] 534// CHECK: 1: [B2.3].~A() (Implicit destructor) 535// CHECK: 2: [B2.1].~A() (Implicit destructor) 536// CHECK: Predecessors (2): B3 B2 537// CHECK: Successors (1): B0 538// CHECK: [ B2 ] 539// CHECK: 1: A a; 540// CHECK: 2: a 541// CHECK: 3: switch ([B2.4]) 542// CHECK: [B3.1] 4: b.operator int() 543// CHECK: T: switch [B2.4] 544// CHECK: Predecessors (1): B4 545// CHECK: Successors (1): B1 546// CHECK: [ B3 ] 547// CHECK: 1: A c; 548// CHECK: 2: [B3.1].~A() (Implicit destructor) 549// CHECK: Predecessors (0): 550// CHECK: Successors (1): B1 551// CHECK: [ B0 (EXIT) ] 552// CHECK: Predecessors (1): B1 553// CHECK: Successors (0): 554// CHECK: [ B9 (ENTRY) ] 555// CHECK: Predecessors (0): 556// CHECK: Successors (1): B2 557// CHECK: [ B1 ] 558// CHECK: 1: [B2.3].~A() (Implicit destructor) 559// CHECK: 2: A g; 560// CHECK: 3: [B1.2].~A() (Implicit destructor) 561// CHECK: 4: [B2.1].~A() (Implicit destructor) 562// CHECK: Predecessors (3): B3 B7 B2 563// CHECK: Successors (1): B0 564// CHECK: [ B2 ] 565// CHECK: 1: A a; 566// CHECK: 2: a 567// CHECK: 3: switch ([B2.4]) { 568// CHECK: case 0: 569// CHECK: { 570// CHECK: [B8.1] if ([B8.2]) 571// CHECK: break; 572// CHECK: if ([B6.1]) 573// CHECK: [B5.1][B4.1] } 574// CHECK: case 1: 575// CHECK: break; 576// CHECK: } 577// CHECK: 4: b.operator int() 578// CHECK: T: switch [B2.4] 579// CHECK: Predecessors (1): B9 580// CHECK: Successors (3): B3 B8 581// CHECK: B1 582// CHECK: [ B3 ] 583// CHECK: case 1: 584// CHECK: T: break; 585// CHECK: Predecessors (2): B2 B4 586// CHECK: Successors (1): B1 587// CHECK: [ B4 ] 588// CHECK: 1: A f; 589// CHECK: 2: [B4.1].~A() (Implicit destructor) 590// CHECK: 3: [B8.1].~A() (Implicit destructor) 591// CHECK: Predecessors (1): B6 592// CHECK: Successors (1): B3 593// CHECK: [ B5 ] 594// CHECK: 1: return; 595// CHECK: 2: [B8.1].~A() (Implicit destructor) 596// CHECK: 3: [B2.3].~A() (Implicit destructor) 597// CHECK: 4: [B2.1].~A() (Implicit destructor) 598// CHECK: Predecessors (1): B6 599// CHECK: Successors (1): B0 600// CHECK: [ B6 ] 601// CHECK: 1: UV 602// CHECK: T: if [B6.1] 603// CHECK: Predecessors (1): B8 604// CHECK: Successors (2): B5 B4 605// CHECK: [ B7 ] 606// CHECK: 1: [B8.1].~A() (Implicit destructor) 607// CHECK: T: break; 608// CHECK: Predecessors (1): B8 609// CHECK: Successors (1): B1 610// CHECK: [ B8 ] 611// CHECK: case 0: 612// CHECK: 1: A c; 613// CHECK: 2: UV 614// CHECK: T: if [B8.2] 615// CHECK: Predecessors (1): B2 616// CHECK: Successors (2): B7 B6 617// CHECK: [ B0 (EXIT) ] 618// CHECK: Predecessors (2): B1 B5 619// CHECK: Successors (0): 620// CHECK: [ B6 (ENTRY) ] 621// CHECK: Predecessors (0): 622// CHECK: Successors (1): B5 623// CHECK: [ B1 ] 624// CHECK: 1: [B2.2].~A() (Implicit destructor) 625// CHECK: 2: [B5.1].~A() (Implicit destructor) 626// CHECK: Predecessors (1): B2 627// CHECK: Successors (1): B0 628// CHECK: [ B2 ] 629// CHECK: 1: a 630// CHECK: 2: for (A a; [B2.4];) 631// CHECK: [B4.1] 3: b.operator int() 632// CHECK: 4: [B2.3] 633// CHECK: T: for (...; [B2.4]; ) 634// CHECK: Predecessors (2): B3 B5 635// CHECK: Successors (2): B4 B1 636// CHECK: [ B3 ] 637// CHECK: 1: [B2.2].~A() (Implicit destructor) 638// CHECK: Predecessors (1): B4 639// CHECK: Successors (1): B2 640// CHECK: [ B4 ] 641// CHECK: 1: A c; 642// CHECK: 2: [B4.1].~A() (Implicit destructor) 643// CHECK: Predecessors (1): B2 644// CHECK: Successors (1): B3 645// CHECK: [ B5 ] 646// CHECK: 1: A a; 647// CHECK: Predecessors (1): B6 648// CHECK: Successors (1): B2 649// CHECK: [ B0 (EXIT) ] 650// CHECK: Predecessors (1): B1 651// CHECK: Successors (0): 652// CHECK: [ B12 (ENTRY) ] 653// CHECK: Predecessors (0): 654// CHECK: Successors (1): B11 655// CHECK: [ B1 ] 656// CHECK: 1: [B2.2].~A() (Implicit destructor) 657// CHECK: 2: [B11.2].~A() (Implicit destructor) 658// CHECK: 3: A f; 659// CHECK: 4: [B1.3].~A() (Implicit destructor) 660// CHECK: 5: [B11.1].~A() (Implicit destructor) 661// CHECK: Predecessors (2): B9 B2 662// CHECK: Successors (1): B0 663// CHECK: [ B2 ] 664// CHECK: 1: b 665// CHECK: 2: for (A b; [B2.4];) { 666// CHECK: [B10.1] if ([B10.2]) 667// CHECK: break; 668// CHECK: if ([B8.1]) 669// CHECK: continue; 670// CHECK: if ([B6.1]) 671// CHECK: [B5.1][B4.1]} 672// CHECK: 3: c.operator int() 673// CHECK: 4: [B2.3] 674// CHECK: T: for (...; [B2.4]; ) 675// CHECK: Predecessors (2): B3 B11 676// CHECK: Successors (2): B10 B1 677// CHECK: [ B3 ] 678// CHECK: 1: [B2.2].~A() (Implicit destructor) 679// CHECK: Predecessors (2): B4 B7 680// CHECK: Successors (1): B2 681// CHECK: [ B4 ] 682// CHECK: 1: A e; 683// CHECK: 2: [B4.1].~A() (Implicit destructor) 684// CHECK: 3: [B10.1].~A() (Implicit destructor) 685// CHECK: Predecessors (1): B6 686// CHECK: Successors (1): B3 687// CHECK: [ B5 ] 688// CHECK: 1: return; 689// CHECK: 2: [B10.1].~A() (Implicit destructor) 690// CHECK: 3: [B2.2].~A() (Implicit destructor) 691// CHECK: 4: [B11.2].~A() (Implicit destructor) 692// CHECK: 5: [B11.1].~A() (Implicit destructor) 693// CHECK: Predecessors (1): B6 694// CHECK: Successors (1): B0 695// CHECK: [ B6 ] 696// CHECK: 1: UV 697// CHECK: T: if [B6.1] 698// CHECK: Predecessors (1): B8 699// CHECK: Successors (2): B5 B4 700// CHECK: [ B7 ] 701// CHECK: 1: [B10.1].~A() (Implicit destructor) 702// CHECK: T: continue; 703// CHECK: Predecessors (1): B8 704// CHECK: Successors (1): B3 705// CHECK: [ B8 ] 706// CHECK: 1: UV 707// CHECK: T: if [B8.1] 708// CHECK: Predecessors (1): B10 709// CHECK: Successors (2): B7 B6 710// CHECK: [ B9 ] 711// CHECK: 1: [B10.1].~A() (Implicit destructor) 712// CHECK: T: break; 713// CHECK: Predecessors (1): B10 714// CHECK: Successors (1): B1 715// CHECK: [ B10 ] 716// CHECK: 1: A d; 717// CHECK: 2: UV 718// CHECK: T: if [B10.2] 719// CHECK: Predecessors (1): B2 720// CHECK: Successors (2): B9 B8 721// CHECK: [ B11 ] 722// CHECK: 1: A a; 723// CHECK: 2: A b; 724// CHECK: Predecessors (1): B12 725// CHECK: Successors (1): B2 726// CHECK: [ B0 (EXIT) ] 727// CHECK: Predecessors (2): B1 B5 728// CHECK: Successors (0): 729