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