auto-obj-dtors-cfg-output.cpp revision e41721e7dfabcc15cb50be9075a4153f1ad648ea
1// RUN: %clang_cc1 -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: if ([B4.6]) 316// CHECK:[B3.2]else 317// CHECK:[B2.2] 5: b.operator int() 318// CHECK: 6: [B4.5] 319// CHECK: T: if [B4.6] 320// CHECK: Predecessors (1): B5 321// CHECK: Successors (2): B3 B2 322// CHECK: [ B0 (EXIT) ] 323// CHECK: Predecessors (1): B1 324// CHECK: Successors (0): 325// CHECK: [ B9 (ENTRY) ] 326// CHECK: Predecessors (0): 327// CHECK: Successors (1): B8 328// CHECK: [ B1 ] 329// CHECK: 1: [B8.4].~A() (Implicit destructor) 330// CHECK: 2: 331// CHECK: 3: A e; 332// CHECK: 4: [B1.3].~A() (Implicit destructor) 333// CHECK: 5: [B8.2].~A() (Implicit destructor) 334// CHECK: Predecessors (2): B2 B5 335// CHECK: Successors (1): B0 336// CHECK: [ B2 ] 337// CHECK: 1: 338// CHECK: 2: A d; 339// CHECK: 3: [B2.2].~A() (Implicit destructor) 340// CHECK: 4: [B4.2].~A() (Implicit destructor) 341// CHECK: Predecessors (1): B4 342// CHECK: Successors (1): B1 343// CHECK: [ B3 ] 344// CHECK: 1: return; 345// CHECK: 2: [B4.2].~A() (Implicit destructor) 346// CHECK: 3: [B8.4].~A() (Implicit destructor) 347// CHECK: 4: [B8.2].~A() (Implicit destructor) 348// CHECK: Predecessors (1): B4 349// CHECK: Successors (1): B0 350// CHECK: [ B4 ] 351// CHECK: 1: 352// CHECK: 2: A c; 353// CHECK: 3: UV 354// CHECK: T: if [B4.3] 355// CHECK: Predecessors (1): B8 356// CHECK: Successors (2): B3 B2 357// CHECK: [ B5 ] 358// CHECK: 1: 359// CHECK: 2: A d; 360// CHECK: 3: [B5.2].~A() (Implicit destructor) 361// CHECK: 4: [B7.2].~A() (Implicit destructor) 362// CHECK: Predecessors (1): B7 363// CHECK: Successors (1): B1 364// CHECK: [ B6 ] 365// CHECK: 1: return; 366// CHECK: 2: [B7.2].~A() (Implicit destructor) 367// CHECK: 3: [B8.4].~A() (Implicit destructor) 368// CHECK: 4: [B8.2].~A() (Implicit destructor) 369// CHECK: Predecessors (1): B7 370// CHECK: Successors (1): B0 371// CHECK: [ B7 ] 372// CHECK: 1: 373// CHECK: 2: A c; 374// CHECK: 3: UV 375// CHECK: T: if [B7.3] 376// CHECK: Predecessors (1): B8 377// CHECK: Successors (2): B6 B5 378// CHECK: [ B8 ] 379// CHECK: 1: 380// CHECK: 2: A a; 381// CHECK: 3: a 382// CHECK: 4: if ([B8.6]) { 383// CHECK:[B7.2] if ([B7.3]) 384// CHECK:[B6.1][B5.2]} else { 385// CHECK:[B4.2] if ([B4.3]) 386// CHECK:[B3.1][B2.2]} 387// CHECK: 5: b.operator int() 388// CHECK: 6: [B8.5] 389// CHECK: T: if [B8.6] 390// CHECK: Predecessors (1): B9 391// CHECK: Successors (2): B7 B4 392// CHECK: [ B0 (EXIT) ] 393// CHECK: Predecessors (3): B1 B3 B6 394// CHECK: Successors (0): 395// CHECK: [ B6 (ENTRY) ] 396// CHECK: Predecessors (0): 397// CHECK: Successors (1): B5 398// CHECK: [ B1 ] 399// CHECK: 1: [B2.2].~A() (Implicit destructor) 400// CHECK: 2: [B5.2].~A() (Implicit destructor) 401// CHECK: Predecessors (1): B2 402// CHECK: Successors (1): B0 403// CHECK: [ B2 ] 404// CHECK: 1: a 405// CHECK: 2: while ([B2.4]) 406// CHECK:[B4.2] 3: b.operator int() 407// CHECK: 4: [B2.3] 408// CHECK: T: while [B2.4] 409// CHECK: Predecessors (2): B3 B5 410// CHECK: Successors (2): B4 B1 411// CHECK: [ B3 ] 412// CHECK: Predecessors (1): B4 413// CHECK: Successors (1): B2 414// CHECK: [ B4 ] 415// CHECK: 1: 416// CHECK: 2: A c; 417// CHECK: 3: [B4.2].~A() (Implicit destructor) 418// CHECK: 4: [B2.2].~A() (Implicit destructor) 419// CHECK: Predecessors (1): B2 420// CHECK: Successors (1): B3 421// CHECK: [ B5 ] 422// CHECK: 1: 423// CHECK: 2: A a; 424// CHECK: Predecessors (1): B6 425// CHECK: Successors (1): B2 426// CHECK: [ B0 (EXIT) ] 427// CHECK: Predecessors (1): B1 428// CHECK: Successors (0): 429// CHECK: [ B12 (ENTRY) ] 430// CHECK: Predecessors (0): 431// CHECK: Successors (1): B11 432// CHECK: [ B1 ] 433// CHECK: 1: [B2.2].~A() (Implicit destructor) 434// CHECK: 2: 435// CHECK: 3: A e; 436// CHECK: 4: [B1.3].~A() (Implicit destructor) 437// CHECK: 5: [B11.2].~A() (Implicit destructor) 438// CHECK: Predecessors (2): B9 B2 439// CHECK: Successors (1): B0 440// CHECK: [ B2 ] 441// CHECK: 1: a 442// CHECK: 2: while ([B2.4]) 443// CHECK: { 444// CHECK:[B10.2] if ([B10.3]) 445// CHECK: break; 446// CHECK: if ([B8.1]) 447// CHECK: continue; 448// CHECK: if ([B6.1]) 449// CHECK:[B5.1][B4.2] } 450// CHECK: 3: b.operator int() 451// CHECK: 4: [B2.3] 452// CHECK: T: while [B2.4] 453// CHECK: Predecessors (2): B3 B11 454// CHECK: Successors (2): B10 B1 455// CHECK: [ B3 ] 456// CHECK: Predecessors (2): B4 B7 457// CHECK: Successors (1): B2 458// CHECK: [ B4 ] 459// CHECK: 1: 460// CHECK: 2: A d; 461// CHECK: 3: [B4.2].~A() (Implicit destructor) 462// CHECK: 4: [B10.2].~A() (Implicit destructor) 463// CHECK: 5: [B2.2].~A() (Implicit destructor) 464// CHECK: Predecessors (1): B6 465// CHECK: Successors (1): B3 466// CHECK: [ B5 ] 467// CHECK: 1: return; 468// CHECK: 2: [B10.2].~A() (Implicit destructor) 469// CHECK: 3: [B2.2].~A() (Implicit destructor) 470// CHECK: 4: [B11.2].~A() (Implicit destructor) 471// CHECK: Predecessors (1): B6 472// CHECK: Successors (1): B0 473// CHECK: [ B6 ] 474// CHECK: 1: UV 475// CHECK: T: if [B6.1] 476// CHECK: Predecessors (1): B8 477// CHECK: Successors (2): B5 B4 478// CHECK: [ B7 ] 479// CHECK: 1: [B10.2].~A() (Implicit destructor) 480// CHECK: 2: [B2.2].~A() (Implicit destructor) 481// CHECK: T: continue; 482// CHECK: Predecessors (1): B8 483// CHECK: Successors (1): B3 484// CHECK: [ B8 ] 485// CHECK: 1: UV 486// CHECK: T: if [B8.1] 487// CHECK: Predecessors (1): B10 488// CHECK: Successors (2): B7 B6 489// CHECK: [ B9 ] 490// CHECK: 1: [B10.2].~A() (Implicit destructor) 491// CHECK: T: break; 492// CHECK: Predecessors (1): B10 493// CHECK: Successors (1): B1 494// CHECK: [ B10 ] 495// CHECK: 1: 496// CHECK: 2: A c; 497// CHECK: 3: UV 498// CHECK: T: if [B10.3] 499// CHECK: Predecessors (1): B2 500// CHECK: Successors (2): B9 B8 501// CHECK: [ B11 ] 502// CHECK: 1: 503// CHECK: 2: A a; 504// CHECK: Predecessors (1): B12 505// CHECK: Successors (1): B2 506// CHECK: [ B0 (EXIT) ] 507// CHECK: Predecessors (2): B1 B5 508// CHECK: Successors (0): 509// CHECK: [ B4 (ENTRY) ] 510// CHECK: Predecessors (0): 511// CHECK: Successors (1): B2 512// CHECK: [ B1 ] 513// CHECK: 1: UV 514// CHECK: T: do ... while [B1.1] 515// CHECK: Predecessors (1): B2 516// CHECK: Successors (2): B3 B0 517// CHECK: [ B2 ] 518// CHECK: 1: 519// CHECK: 2: A a; 520// CHECK: 3: [B2.2].~A() (Implicit destructor) 521// CHECK: Predecessors (2): B3 B4 522// CHECK: Successors (1): B1 523// CHECK: [ B3 ] 524// CHECK: Predecessors (1): B1 525// CHECK: Successors (1): B2 526// CHECK: [ B0 (EXIT) ] 527// CHECK: Predecessors (1): B1 528// CHECK: Successors (0): 529// CHECK: [ B12 (ENTRY) ] 530// CHECK: Predecessors (0): 531// CHECK: Successors (1): B11 532// CHECK: [ B1 ] 533// CHECK: 1: 534// CHECK: 2: A d; 535// CHECK: 3: [B1.2].~A() (Implicit destructor) 536// CHECK: 4: [B11.2].~A() (Implicit destructor) 537// CHECK: Predecessors (2): B8 B2 538// CHECK: Successors (1): B0 539// CHECK: [ B2 ] 540// CHECK: 1: UV 541// CHECK: T: do ... while [B2.1] 542// CHECK: Predecessors (2): B3 B6 543// CHECK: Successors (2): B10 B1 544// CHECK: [ B3 ] 545// CHECK: 1: 546// CHECK: 2: A c; 547// CHECK: 3: [B3.2].~A() (Implicit destructor) 548// CHECK: 4: [B9.2].~A() (Implicit destructor) 549// CHECK: Predecessors (1): B5 550// CHECK: Successors (1): B2 551// CHECK: [ B4 ] 552// CHECK: 1: return; 553// CHECK: 2: [B9.2].~A() (Implicit destructor) 554// CHECK: 3: [B11.2].~A() (Implicit destructor) 555// CHECK: Predecessors (1): B5 556// CHECK: Successors (1): B0 557// CHECK: [ B5 ] 558// CHECK: 1: UV 559// CHECK: T: if [B5.1] 560// CHECK: Predecessors (1): B7 561// CHECK: Successors (2): B4 B3 562// CHECK: [ B6 ] 563// CHECK: 1: [B9.2].~A() (Implicit destructor) 564// CHECK: T: continue; 565// CHECK: Predecessors (1): B7 566// CHECK: Successors (1): B2 567// CHECK: [ B7 ] 568// CHECK: 1: UV 569// CHECK: T: if [B7.1] 570// CHECK: Predecessors (1): B9 571// CHECK: Successors (2): B6 B5 572// CHECK: [ B8 ] 573// CHECK: 1: [B9.2].~A() (Implicit destructor) 574// CHECK: T: break; 575// CHECK: Predecessors (1): B9 576// CHECK: Successors (1): B1 577// CHECK: [ B9 ] 578// CHECK: 1: 579// CHECK: 2: A b; 580// CHECK: 3: UV 581// CHECK: T: if [B9.3] 582// CHECK: Predecessors (2): B10 B11 583// CHECK: Successors (2): B8 B7 584// CHECK: [ B10 ] 585// CHECK: Predecessors (1): B2 586// CHECK: Successors (1): B9 587// CHECK: [ B11 ] 588// CHECK: 1: 589// CHECK: 2: A a; 590// CHECK: Predecessors (1): B12 591// CHECK: Successors (1): B9 592// CHECK: [ B0 (EXIT) ] 593// CHECK: Predecessors (2): B1 B4 594// CHECK: Successors (0): 595// CHECK: [ B4 (ENTRY) ] 596// CHECK: Predecessors (0): 597// CHECK: Successors (1): B2 598// CHECK: [ B1 ] 599// CHECK: 1: [B2.4].~A() (Implicit destructor) 600// CHECK: 2: [B2.2].~A() (Implicit destructor) 601// CHECK: Predecessors (2): B3 B2 602// CHECK: Successors (1): B0 603// CHECK: [ B2 ] 604// CHECK: 1: 605// CHECK: 2: A a; 606// CHECK: 3: a 607// CHECK: 4: switch ([B2.5]) 608// CHECK:[B3.2] 5: b.operator int() 609// CHECK: T: switch [B2.5] 610// CHECK: Predecessors (1): B4 611// CHECK: Successors (1): B1 612// CHECK: [ B3 ] 613// CHECK: 1: 614// CHECK: 2: A c; 615// CHECK: 3: [B3.2].~A() (Implicit destructor) 616// CHECK: Predecessors (0): 617// CHECK: Successors (1): B1 618// CHECK: [ B0 (EXIT) ] 619// CHECK: Predecessors (1): B1 620// CHECK: Successors (0): 621// CHECK: [ B9 (ENTRY) ] 622// CHECK: Predecessors (0): 623// CHECK: Successors (1): B2 624// CHECK: [ B1 ] 625// CHECK: 1: [B2.4].~A() (Implicit destructor) 626// CHECK: 2: 627// CHECK: 3: A g; 628// CHECK: 4: [B1.3].~A() (Implicit destructor) 629// CHECK: 5: [B2.2].~A() (Implicit destructor) 630// CHECK: Predecessors (3): B3 B7 B2 631// CHECK: Successors (1): B0 632// CHECK: [ B2 ] 633// CHECK: 1: 634// CHECK: 2: A a; 635// CHECK: 3: a 636// CHECK: 4: switch ([B2.5]) { 637// CHECK: case 0: 638// CHECK: { 639// CHECK:[B8.2] if ([B8.3]) 640// CHECK: break; 641// CHECK: if ([B6.1]) 642// CHECK:[B5.1][B4.2] } 643// CHECK: case 1: 644// CHECK: break; 645// CHECK:} 646// CHECK: 5: b.operator int() 647// CHECK: T: switch [B2.5] 648// CHECK: Predecessors (1): B9 649// CHECK: Successors (3): B3 B8 650// CHECK: B1 651// CHECK: [ B3 ] 652// CHECK: case 1: 653// CHECK: T: break; 654// CHECK: Predecessors (2): B2 B4 655// CHECK: Successors (1): B1 656// CHECK: [ B4 ] 657// CHECK: 1: 658// CHECK: 2: A f; 659// CHECK: 3: [B4.2].~A() (Implicit destructor) 660// CHECK: 4: [B8.2].~A() (Implicit destructor) 661// CHECK: Predecessors (1): B6 662// CHECK: Successors (1): B3 663// CHECK: [ B5 ] 664// CHECK: 1: return; 665// CHECK: 2: [B8.2].~A() (Implicit destructor) 666// CHECK: 3: [B2.4].~A() (Implicit destructor) 667// CHECK: 4: [B2.2].~A() (Implicit destructor) 668// CHECK: Predecessors (1): B6 669// CHECK: Successors (1): B0 670// CHECK: [ B6 ] 671// CHECK: 1: UV 672// CHECK: T: if [B6.1] 673// CHECK: Predecessors (1): B8 674// CHECK: Successors (2): B5 B4 675// CHECK: [ B7 ] 676// CHECK: 1: [B8.2].~A() (Implicit destructor) 677// CHECK: T: break; 678// CHECK: Predecessors (1): B8 679// CHECK: Successors (1): B1 680// CHECK: [ B8 ] 681// CHECK: case 0: 682// CHECK: 1: 683// CHECK: 2: A c; 684// CHECK: 3: UV 685// CHECK: T: if [B8.3] 686// CHECK: Predecessors (1): B2 687// CHECK: Successors (2): B7 B6 688// CHECK: [ B0 (EXIT) ] 689// CHECK: Predecessors (2): B1 B5 690// CHECK: Successors (0): 691// CHECK: [ B6 (ENTRY) ] 692// CHECK: Predecessors (0): 693// CHECK: Successors (1): B5 694// CHECK: [ B1 ] 695// CHECK: 1: [B2.2].~A() (Implicit destructor) 696// CHECK: 2: [B5.2].~A() (Implicit destructor) 697// CHECK: Predecessors (1): B2 698// CHECK: Successors (1): B0 699// CHECK: [ B2 ] 700// CHECK: 1: a 701// CHECK: 2: for (A a; [B2.4];) 702// CHECK:[B4.2] 3: b.operator int() 703// CHECK: 4: [B2.3] 704// CHECK: T: for (...; [B2.4]; ) 705// CHECK: Predecessors (2): B3 B5 706// CHECK: Successors (2): B4 B1 707// CHECK: [ B3 ] 708// CHECK: 1: [B2.2].~A() (Implicit destructor) 709// CHECK: Predecessors (1): B4 710// CHECK: Successors (1): B2 711// CHECK: [ B4 ] 712// CHECK: 1: 713// CHECK: 2: A c; 714// CHECK: 3: [B4.2].~A() (Implicit destructor) 715// CHECK: Predecessors (1): B2 716// CHECK: Successors (1): B3 717// CHECK: [ B5 ] 718// CHECK: 1: 719// CHECK: 2: A a; 720// CHECK: Predecessors (1): B6 721// CHECK: Successors (1): B2 722// CHECK: [ B0 (EXIT) ] 723// CHECK: Predecessors (1): B1 724// CHECK: Successors (0): 725// CHECK: [ B12 (ENTRY) ] 726// CHECK: Predecessors (0): 727// CHECK: Successors (1): B11 728// CHECK: [ B1 ] 729// CHECK: 1: [B2.2].~A() (Implicit destructor) 730// CHECK: 2: [B11.4].~A() (Implicit destructor) 731// CHECK: 3: 732// CHECK: 4: A f; 733// CHECK: 5: [B1.4].~A() (Implicit destructor) 734// CHECK: 6: [B11.2].~A() (Implicit destructor) 735// CHECK: Predecessors (2): B9 B2 736// CHECK: Successors (1): B0 737// CHECK: [ B2 ] 738// CHECK: 1: b 739// CHECK: 2: for (A b; [B2.4];) { 740// CHECK:[B10.2] if ([B10.3]) 741// CHECK: break; 742// CHECK: if ([B8.1]) 743// CHECK: continue; 744// CHECK: if ([B6.1]) 745// CHECK:[B5.1][B4.2]} 746// CHECK: 3: c.operator int() 747// CHECK: 4: [B2.3] 748// CHECK: T: for (...; [B2.4]; ) 749// CHECK: Predecessors (2): B3 B11 750// CHECK: Successors (2): B10 B1 751// CHECK: [ B3 ] 752// CHECK: 1: [B2.2].~A() (Implicit destructor) 753// CHECK: Predecessors (2): B4 B7 754// CHECK: Successors (1): B2 755// CHECK: [ B4 ] 756// CHECK: 1: 757// CHECK: 2: A e; 758// CHECK: 3: [B4.2].~A() (Implicit destructor) 759// CHECK: 4: [B10.2].~A() (Implicit destructor) 760// CHECK: Predecessors (1): B6 761// CHECK: Successors (1): B3 762// CHECK: [ B5 ] 763// CHECK: 1: return; 764// CHECK: 2: [B10.2].~A() (Implicit destructor) 765// CHECK: 3: [B2.2].~A() (Implicit destructor) 766// CHECK: 4: [B11.4].~A() (Implicit destructor) 767// CHECK: 5: [B11.2].~A() (Implicit destructor) 768// CHECK: Predecessors (1): B6 769// CHECK: Successors (1): B0 770// CHECK: [ B6 ] 771// CHECK: 1: UV 772// CHECK: T: if [B6.1] 773// CHECK: Predecessors (1): B8 774// CHECK: Successors (2): B5 B4 775// CHECK: [ B7 ] 776// CHECK: 1: [B10.2].~A() (Implicit destructor) 777// CHECK: T: continue; 778// CHECK: Predecessors (1): B8 779// CHECK: Successors (1): B3 780// CHECK: [ B8 ] 781// CHECK: 1: UV 782// CHECK: T: if [B8.1] 783// CHECK: Predecessors (1): B10 784// CHECK: Successors (2): B7 B6 785// CHECK: [ B9 ] 786// CHECK: 1: [B10.2].~A() (Implicit destructor) 787// CHECK: T: break; 788// CHECK: Predecessors (1): B10 789// CHECK: Successors (1): B1 790// CHECK: [ B10 ] 791// CHECK: 1: 792// CHECK: 2: A d; 793// CHECK: 3: UV 794// CHECK: T: if [B10.3] 795// CHECK: Predecessors (1): B2 796// CHECK: Successors (2): B9 B8 797// CHECK: [ B11 ] 798// CHECK: 1: 799// CHECK: 2: A a; 800// CHECK: 3: 801// CHECK: 4: A b; 802// CHECK: Predecessors (1): B12 803// CHECK: Successors (1): B2 804// CHECK: [ B0 (EXIT) ] 805// CHECK: Predecessors (2): B1 B5 806// CHECK: Successors (0): 807// CHECK: [ B3 (ENTRY) ] 808// CHECK: Predecessors (0): 809// CHECK: Successors (1): B0 810// CHECK: [ B1 ] 811// CHECK: T: try ... 812// CHECK: Predecessors (0): 813// CHECK: Successors (2): B2 B0 814// CHECK: [ B2 ] 815// CHECK: catch (const A &e): 816// CHECK: Predecessors (1): B1 817// CHECK: Successors (1): B0 818// CHECK: [ B0 (EXIT) ] 819// CHECK: Predecessors (3): B2 B1 B3 820// CHECK: Successors (0): 821// CHECK: [ B3 (ENTRY) ] 822// CHECK: Predecessors (0): 823// CHECK: Successors (1): B0 824// CHECK: [ B1 ] 825// CHECK: T: try ... 826// CHECK: Predecessors (0): 827// CHECK: Successors (2): B2 B0 828// CHECK: [ B2 ] 829// CHECK: catch (A e): 830// CHECK: 1: .~A() (Implicit destructor) 831// CHECK: Predecessors (1): B1 832// CHECK: Successors (1): B0 833// CHECK: [ B0 (EXIT) ] 834// CHECK: Predecessors (3): B2 B1 B3 835// CHECK: Successors (0): 836