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