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