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