1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -analyze -analyzer-checker=debug.DumpCFG -cfg-add-implicit-dtors %s 2>&1 | FileCheck %s 2 // XPASS: * 3 4 class A { 5 public: 6 A() {} 7 ~A() {} 8 operator int() const { return 1; } 9 }; 10 11 extern const bool UV; 12 13 void test_const_ref() { 14 A a; 15 const A& b = a; 16 const A& c = A(); 17 } 18 19 void test_array() { 20 A a[2]; 21 A b[0]; 22 } 23 24 void test_scope() { 25 A a; 26 { A c; 27 A d; 28 } 29 A b; 30 } 31 32 void test_return() { 33 A a; 34 A b; 35 if (UV) return; 36 A c; 37 } 38 39 void test_goto() { 40 A a; 41 l0: 42 A b; 43 { A a; 44 if (UV) goto l0; 45 if (UV) goto l1; 46 A b; 47 } 48 l1: 49 A c; 50 } 51 52 void test_if_implicit_scope() { 53 A a; 54 if (A b = a) 55 A c; 56 else A c; 57 } 58 59 void 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 73 void test_while_implicit_scope() { 74 A a; 75 while (A b = a) 76 A c; 77 } 78 79 void 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 91 void test_do_implicit_scope() { 92 do A a; 93 while (UV); 94 } 95 96 void 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 108 void test_switch_implicit_scope() { 109 A a; 110 switch (A b = a) 111 A c; 112 } 113 114 void 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 129 void test_for_implicit_scope() { 130 for (A a; A b = a; ) 131 A c; 132 } 133 134 void 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 146 void test_catch_const_ref() { 147 try { 148 } catch (const A& e) { 149 } 150 } 151 152 void 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: T: if [B4.11] 332 // CHECK: Predecessors (1): B5 333 // CHECK: Successors (2): B3 B2 334 // CHECK: [ B0 (EXIT) ] 335 // CHECK: Predecessors (1): B1 336 // CHECK: Successors (0): 337 // CHECK: [ B9 (ENTRY) ] 338 // CHECK: Predecessors (0): 339 // CHECK: Successors (1): B8 340 // CHECK: [ B1 ] 341 // CHECK: 1: [B8.6].~A() (Implicit destructor) 342 // CHECK: 2: 343 // CHECK: 3: A e; 344 // CHECK: 4: [B1.3].~A() (Implicit destructor) 345 // CHECK: 5: [B8.2].~A() (Implicit destructor) 346 // CHECK: Predecessors (2): B2 B5 347 // CHECK: Successors (1): B0 348 // CHECK: [ B2 ] 349 // CHECK: 1: 350 // CHECK: 2: A d; 351 // CHECK: 3: [B2.2].~A() (Implicit destructor) 352 // CHECK: 4: [B4.2].~A() (Implicit destructor) 353 // CHECK: Predecessors (1): B4 354 // CHECK: Successors (1): B1 355 // CHECK: [ B3 ] 356 // CHECK: 1: return; 357 // CHECK: 2: [B4.2].~A() (Implicit destructor) 358 // CHECK: 3: [B8.6].~A() (Implicit destructor) 359 // CHECK: 4: [B8.2].~A() (Implicit destructor) 360 // CHECK: Predecessors (1): B4 361 // CHECK: Successors (1): B0 362 // CHECK: [ B4 ] 363 // CHECK: 1: 364 // CHECK: 2: A c; 365 // CHECK: 3: UV 366 // CHECK: 4: [B4.3] 367 // CHECK: T: if [B4.4] 368 // CHECK: Predecessors (1): B8 369 // CHECK: Successors (2): B3 B2 370 // CHECK: [ B5 ] 371 // CHECK: 1: 372 // CHECK: 2: A d; 373 // CHECK: 3: [B5.2].~A() (Implicit destructor) 374 // CHECK: 4: [B7.2].~A() (Implicit destructor) 375 // CHECK: Predecessors (1): B7 376 // CHECK: Successors (1): B1 377 // CHECK: [ B6 ] 378 // CHECK: 1: return; 379 // CHECK: 2: [B7.2].~A() (Implicit destructor) 380 // CHECK: 3: [B8.6].~A() (Implicit destructor) 381 // CHECK: 4: [B8.2].~A() (Implicit destructor) 382 // CHECK: Predecessors (1): B7 383 // CHECK: Successors (1): B0 384 // CHECK: [ B7 ] 385 // CHECK: 1: 386 // CHECK: 2: A c; 387 // CHECK: 3: UV 388 // CHECK: 4: [B7.3] 389 // CHECK: T: if [B7.4] 390 // CHECK: Predecessors (1): B8 391 // CHECK: Successors (2): B6 B5 392 // CHECK: [ B8 ] 393 // CHECK: 1: 394 // CHECK: 2: A a; 395 // CHECK: 3: a 396 // CHECK: 4: [B8.3] 397 // CHECK: 5: [B8.4] 398 // CHECK: 6: A b = a; 399 // CHECK: 7: b 400 // CHECK: 8: [B8.7] 401 // CHECK: 9: [B8.8].operator int 402 // CHECK: 10: [B8.9]() 403 // CHECK: 11: [B8.10] 404 // CHECK: T: if [B8.11] 405 // CHECK: Predecessors (1): B9 406 // CHECK: Successors (2): B7 B4 407 // CHECK: [ B0 (EXIT) ] 408 // CHECK: Predecessors (3): B1 B3 B6 409 // CHECK: Successors (0): 410 // CHECK: [ B6 (ENTRY) ] 411 // CHECK: Predecessors (0): 412 // CHECK: Successors (1): B5 413 // CHECK: [ B1 ] 414 // CHECK: 1: [B2.4].~A() (Implicit destructor) 415 // CHECK: 2: [B5.2].~A() (Implicit destructor) 416 // CHECK: Predecessors (1): B2 417 // CHECK: Successors (1): B0 418 // CHECK: [ B2 ] 419 // CHECK: 1: a 420 // CHECK: 2: [B2.1] 421 // CHECK: 3: [B2.2] 422 // CHECK: 4: A b = a; 423 // CHECK: 5: b 424 // CHECK: 6: [B2.5] 425 // CHECK: 7: [B2.6].operator int 426 // CHECK: 8: [B2.7]() 427 // CHECK: 9: [B2.8] 428 // CHECK: T: while [B2.9] 429 // CHECK: Predecessors (2): B3 B5 430 // CHECK: Successors (2): B4 B1 431 // CHECK: [ B3 ] 432 // CHECK: Predecessors (1): B4 433 // CHECK: Successors (1): B2 434 // CHECK: [ B4 ] 435 // CHECK: 1: 436 // CHECK: 2: A c; 437 // CHECK: 3: [B4.2].~A() (Implicit destructor) 438 // CHECK: 4: [B2.4].~A() (Implicit destructor) 439 // CHECK: Predecessors (1): B2 440 // CHECK: Successors (1): B3 441 // CHECK: [ B5 ] 442 // CHECK: 1: 443 // CHECK: 2: A a; 444 // CHECK: Predecessors (1): B6 445 // CHECK: Successors (1): B2 446 // CHECK: [ B0 (EXIT) ] 447 // CHECK: Predecessors (1): B1 448 // CHECK: Successors (0): 449 // CHECK: [ B12 (ENTRY) ] 450 // CHECK: Predecessors (0): 451 // CHECK: Successors (1): B11 452 // CHECK: [ B1 ] 453 // CHECK: 1: [B2.4].~A() (Implicit destructor) 454 // CHECK: 2: 455 // CHECK: 3: A e; 456 // CHECK: 4: [B1.3].~A() (Implicit destructor) 457 // CHECK: 5: [B11.2].~A() (Implicit destructor) 458 // CHECK: Predecessors (2): B9 B2 459 // CHECK: Successors (1): B0 460 // CHECK: [ B2 ] 461 // CHECK: 1: a 462 // CHECK: 2: [B2.1] 463 // CHECK: 3: [B2.2] 464 // CHECK: 4: A b = a; 465 // CHECK: 5: b 466 // CHECK: 6: [B2.5] 467 // CHECK: 7: [B2.6].operator int 468 // CHECK: 8: [B2.7]() 469 // CHECK: 9: [B2.8] 470 // CHECK: T: while [B2.9] 471 // CHECK: Predecessors (2): B3 B11 472 // CHECK: Successors (2): B10 B1 473 // CHECK: [ B3 ] 474 // CHECK: Predecessors (2): B4 B7 475 // CHECK: Successors (1): B2 476 // CHECK: [ B4 ] 477 // CHECK: 1: 478 // CHECK: 2: A d; 479 // CHECK: 3: [B4.2].~A() (Implicit destructor) 480 // CHECK: 4: [B10.2].~A() (Implicit destructor) 481 // CHECK: 5: [B2.4].~A() (Implicit destructor) 482 // CHECK: Predecessors (1): B6 483 // CHECK: Successors (1): B3 484 // CHECK: [ B5 ] 485 // CHECK: 1: return; 486 // CHECK: 2: [B10.2].~A() (Implicit destructor) 487 // CHECK: 3: [B2.4].~A() (Implicit destructor) 488 // CHECK: 4: [B11.2].~A() (Implicit destructor) 489 // CHECK: Predecessors (1): B6 490 // CHECK: Successors (1): B0 491 // CHECK: [ B6 ] 492 // CHECK: 1: UV 493 // CHECK: 2: [B6.1] 494 // CHECK: T: if [B6.2] 495 // CHECK: Predecessors (1): B8 496 // CHECK: Successors (2): B5 B4 497 // CHECK: [ B7 ] 498 // CHECK: 1: [B10.2].~A() (Implicit destructor) 499 // CHECK: 2: [B2.4].~A() (Implicit destructor) 500 // CHECK: T: continue; 501 // CHECK: Predecessors (1): B8 502 // CHECK: Successors (1): B3 503 // CHECK: [ B8 ] 504 // CHECK: 1: UV 505 // CHECK: 2: [B8.1] 506 // CHECK: T: if [B8.2] 507 // CHECK: Predecessors (1): B10 508 // CHECK: Successors (2): B7 B6 509 // CHECK: [ B9 ] 510 // CHECK: 1: [B10.2].~A() (Implicit destructor) 511 // CHECK: T: break; 512 // CHECK: Predecessors (1): B10 513 // CHECK: Successors (1): B1 514 // CHECK: [ B10 ] 515 // CHECK: 1: 516 // CHECK: 2: A c; 517 // CHECK: 3: UV 518 // CHECK: 4: [B10.3] 519 // CHECK: T: if [B10.4] 520 // CHECK: Predecessors (1): B2 521 // CHECK: Successors (2): B9 B8 522 // CHECK: [ B11 ] 523 // CHECK: 1: 524 // CHECK: 2: A a; 525 // CHECK: Predecessors (1): B12 526 // CHECK: Successors (1): B2 527 // CHECK: [ B0 (EXIT) ] 528 // CHECK: Predecessors (2): B1 B5 529 // CHECK: Successors (0): 530 // CHECK: [ B4 (ENTRY) ] 531 // CHECK: Predecessors (0): 532 // CHECK: Successors (1): B2 533 // CHECK: [ B1 ] 534 // CHECK: 1: UV 535 // CHECK: 2: [B1.1] 536 // CHECK: T: do ... while [B1.2] 537 // CHECK: Predecessors (1): B2 538 // CHECK: Successors (2): B3 B0 539 // CHECK: [ B2 ] 540 // CHECK: 1: 541 // CHECK: 2: A a; 542 // CHECK: 3: [B2.2].~A() (Implicit destructor) 543 // CHECK: Predecessors (2): B3 B4 544 // CHECK: Successors (1): B1 545 // CHECK: [ B3 ] 546 // CHECK: Predecessors (1): B1 547 // CHECK: Successors (1): B2 548 // CHECK: [ B0 (EXIT) ] 549 // CHECK: Predecessors (1): B1 550 // CHECK: Successors (0): 551 // CHECK: [ B12 (ENTRY) ] 552 // CHECK: Predecessors (0): 553 // CHECK: Successors (1): B11 554 // CHECK: [ B1 ] 555 // CHECK: 1: 556 // CHECK: 2: A d; 557 // CHECK: 3: [B1.2].~A() (Implicit destructor) 558 // CHECK: 4: [B11.2].~A() (Implicit destructor) 559 // CHECK: Predecessors (2): B8 B2 560 // CHECK: Successors (1): B0 561 // CHECK: [ B2 ] 562 // CHECK: 1: UV 563 // CHECK: 2: [B2.1] 564 // CHECK: T: do ... while [B2.2] 565 // CHECK: Predecessors (2): B3 B6 566 // CHECK: Successors (2): B10 B1 567 // CHECK: [ B3 ] 568 // CHECK: 1: 569 // CHECK: 2: A c; 570 // CHECK: 3: [B3.2].~A() (Implicit destructor) 571 // CHECK: 4: [B9.2].~A() (Implicit destructor) 572 // CHECK: Predecessors (1): B5 573 // CHECK: Successors (1): B2 574 // CHECK: [ B4 ] 575 // CHECK: 1: return; 576 // CHECK: 2: [B9.2].~A() (Implicit destructor) 577 // CHECK: 3: [B11.2].~A() (Implicit destructor) 578 // CHECK: Predecessors (1): B5 579 // CHECK: Successors (1): B0 580 // CHECK: [ B5 ] 581 // CHECK: 1: UV 582 // CHECK: 2: [B5.1] 583 // CHECK: T: if [B5.2] 584 // CHECK: Predecessors (1): B7 585 // CHECK: Successors (2): B4 B3 586 // CHECK: [ B6 ] 587 // CHECK: 1: [B9.2].~A() (Implicit destructor) 588 // CHECK: T: continue; 589 // CHECK: Predecessors (1): B7 590 // CHECK: Successors (1): B2 591 // CHECK: [ B7 ] 592 // CHECK: 1: UV 593 // CHECK: 2: [B7.1] 594 // CHECK: T: if [B7.2] 595 // CHECK: Predecessors (1): B9 596 // CHECK: Successors (2): B6 B5 597 // CHECK: [ B8 ] 598 // CHECK: 1: [B9.2].~A() (Implicit destructor) 599 // CHECK: T: break; 600 // CHECK: Predecessors (1): B9 601 // CHECK: Successors (1): B1 602 // CHECK: [ B9 ] 603 // CHECK: 1: 604 // CHECK: 2: A b; 605 // CHECK: 3: UV 606 // CHECK: 4: [B9.3] 607 // CHECK: T: if [B9.4] 608 // CHECK: Predecessors (2): B10 B11 609 // CHECK: Successors (2): B8 B7 610 // CHECK: [ B10 ] 611 // CHECK: Predecessors (1): B2 612 // CHECK: Successors (1): B9 613 // CHECK: [ B11 ] 614 // CHECK: 1: 615 // CHECK: 2: A a; 616 // CHECK: Predecessors (1): B12 617 // CHECK: Successors (1): B9 618 // CHECK: [ B0 (EXIT) ] 619 // CHECK: Predecessors (2): B1 B4 620 // CHECK: Successors (0): 621 // CHECK: [ B4 (ENTRY) ] 622 // CHECK: Predecessors (0): 623 // CHECK: Successors (1): B2 624 // CHECK: [ B1 ] 625 // CHECK: 1: [B2.6].~A() (Implicit destructor) 626 // CHECK: 2: [B2.2].~A() (Implicit destructor) 627 // CHECK: Predecessors (2): B3 B2 628 // CHECK: Successors (1): B0 629 // CHECK: [ B2 ] 630 // CHECK: 1: 631 // CHECK: 2: A a; 632 // CHECK: 3: a 633 // CHECK: 4: [B2.3] 634 // CHECK: 5: [B2.4] 635 // CHECK: 6: A b = a; 636 // CHECK: 7: b 637 // CHECK: 8: [B2.7] 638 // CHECK: 9: [B2.8].operator int 639 // CHECK: 10: [B2.9]() 640 // CHECK: T: switch [B2.10] 641 // CHECK: Predecessors (1): B4 642 // CHECK: Successors (1): B1 643 // CHECK: [ B3 ] 644 // CHECK: 1: 645 // CHECK: 2: A c; 646 // CHECK: 3: [B3.2].~A() (Implicit destructor) 647 // CHECK: Predecessors (0): 648 // CHECK: Successors (1): B1 649 // CHECK: [ B0 (EXIT) ] 650 // CHECK: Predecessors (1): B1 651 // CHECK: Successors (0): 652 // CHECK: [ B9 (ENTRY) ] 653 // CHECK: Predecessors (0): 654 // CHECK: Successors (1): B2 655 // CHECK: [ B1 ] 656 // CHECK: 1: [B2.6].~A() (Implicit destructor) 657 // CHECK: 2: 658 // CHECK: 3: A g; 659 // CHECK: 4: [B1.3].~A() (Implicit destructor) 660 // CHECK: 5: [B2.2].~A() (Implicit destructor) 661 // CHECK: Predecessors (3): B3 B7 B2 662 // CHECK: Successors (1): B0 663 // CHECK: [ B2 ] 664 // CHECK: 1: 665 // CHECK: 2: A a; 666 // CHECK: 3: a 667 // CHECK: 4: [B2.3] 668 // CHECK: 5: [B2.4] 669 // CHECK: 6: A b = a; 670 // CHECK: 7: b 671 // CHECK: 8: [B2.7] 672 // CHECK: 9: [B2.8].operator int 673 // CHECK: 10: [B2.9]() 674 // CHECK: T: switch [B2.10] 675 // CHECK: Predecessors (1): B9 676 // CHECK: Successors (3): B3 B8 677 // CHECK: B1 678 // CHECK: [ B3 ] 679 // CHECK: case 1: 680 // CHECK: T: break; 681 // CHECK: Predecessors (2): B2 B4 682 // CHECK: Successors (1): B1 683 // CHECK: [ B4 ] 684 // CHECK: 1: 685 // CHECK: 2: A f; 686 // CHECK: 3: [B4.2].~A() (Implicit destructor) 687 // CHECK: 4: [B8.2].~A() (Implicit destructor) 688 // CHECK: Predecessors (1): B6 689 // CHECK: Successors (1): B3 690 // CHECK: [ B5 ] 691 // CHECK: 1: return; 692 // CHECK: 2: [B8.2].~A() (Implicit destructor) 693 // CHECK: 3: [B2.6].~A() (Implicit destructor) 694 // CHECK: 4: [B2.2].~A() (Implicit destructor) 695 // CHECK: Predecessors (1): B6 696 // CHECK: Successors (1): B0 697 // CHECK: [ B6 ] 698 // CHECK: 1: UV 699 // CHECK: 2: [B6.1] 700 // CHECK: T: if [B6.2] 701 // CHECK: Predecessors (1): B8 702 // CHECK: Successors (2): B5 B4 703 // CHECK: [ B7 ] 704 // CHECK: 1: [B8.2].~A() (Implicit destructor) 705 // CHECK: T: break; 706 // CHECK: Predecessors (1): B8 707 // CHECK: Successors (1): B1 708 // CHECK: [ B8 ] 709 // CHECK: case 0: 710 // CHECK: 1: 711 // CHECK: 2: A c; 712 // CHECK: 3: UV 713 // CHECK: 4: [B8.3] 714 // CHECK: T: if [B8.4] 715 // CHECK: Predecessors (1): B2 716 // CHECK: Successors (2): B7 B6 717 // CHECK: [ B0 (EXIT) ] 718 // CHECK: Predecessors (2): B1 B5 719 // CHECK: Successors (0): 720 // CHECK: [ B6 (ENTRY) ] 721 // CHECK: Predecessors (0): 722 // CHECK: Successors (1): B5 723 // CHECK: [ B1 ] 724 // CHECK: 1: [B2.4].~A() (Implicit destructor) 725 // CHECK: 2: [B5.2].~A() (Implicit destructor) 726 // CHECK: Predecessors (1): B2 727 // CHECK: Successors (1): B0 728 // CHECK: [ B2 ] 729 // CHECK: 1: a 730 // CHECK: 2: [B2.1] 731 // CHECK: 3: [B2.2] 732 // CHECK: 4: A b = a; 733 // CHECK: 5: b 734 // CHECK: 6: [B2.5] 735 // CHECK: 7: [B2.6].operator int 736 // CHECK: 8: [B2.7]() 737 // CHECK: 9: [B2.8] 738 // CHECK: T: for (...; [B2.9]; ) 739 // CHECK: Predecessors (2): B3 B5 740 // CHECK: Successors (2): B4 B1 741 // CHECK: [ B3 ] 742 // CHECK: 1: [B2.4].~A() (Implicit destructor) 743 // CHECK: Predecessors (1): B4 744 // CHECK: Successors (1): B2 745 // CHECK: [ B4 ] 746 // CHECK: 1: 747 // CHECK: 2: A c; 748 // CHECK: 3: [B4.2].~A() (Implicit destructor) 749 // CHECK: Predecessors (1): B2 750 // CHECK: Successors (1): B3 751 // CHECK: [ B5 ] 752 // CHECK: 1: 753 // CHECK: 2: A a; 754 // CHECK: Predecessors (1): B6 755 // CHECK: Successors (1): B2 756 // CHECK: [ B0 (EXIT) ] 757 // CHECK: Predecessors (1): B1 758 // CHECK: Successors (0): 759 // CHECK: [ B12 (ENTRY) ] 760 // CHECK: Predecessors (0): 761 // CHECK: Successors (1): B11 762 // CHECK: [ B1 ] 763 // CHECK: 1: [B2.4].~A() (Implicit destructor) 764 // CHECK: 2: [B11.4].~A() (Implicit destructor) 765 // CHECK: 3: 766 // CHECK: 4: A f; 767 // CHECK: 5: [B1.4].~A() (Implicit destructor) 768 // CHECK: 6: [B11.2].~A() (Implicit destructor) 769 // CHECK: Predecessors (2): B9 B2 770 // CHECK: Successors (1): B0 771 // CHECK: [ B2 ] 772 // CHECK: 1: b 773 // CHECK: 2: [B2.1] 774 // CHECK: 3: [B2.2] 775 // CHECK: 4: A c = b; 776 // CHECK: 5: c 777 // CHECK: 6: [B2.5] 778 // CHECK: 7: [B2.6].operator int 779 // CHECK: 8: [B2.7]() 780 // CHECK: 9: [B2.8] 781 // CHECK: T: for (...; [B2.9]; ) 782 // CHECK: Predecessors (2): B3 B11 783 // CHECK: Successors (2): B10 B1 784 // CHECK: [ B3 ] 785 // CHECK: 1: [B2.4].~A() (Implicit destructor) 786 // CHECK: Predecessors (2): B4 B7 787 // CHECK: Successors (1): B2 788 // CHECK: [ B4 ] 789 // CHECK: 1: 790 // CHECK: 2: A e; 791 // CHECK: 3: [B4.2].~A() (Implicit destructor) 792 // CHECK: 4: [B10.2].~A() (Implicit destructor) 793 // CHECK: Predecessors (1): B6 794 // CHECK: Successors (1): B3 795 // CHECK: [ B5 ] 796 // CHECK: 1: return; 797 // CHECK: 2: [B10.2].~A() (Implicit destructor) 798 // CHECK: 3: [B2.4].~A() (Implicit destructor) 799 // CHECK: 4: [B11.4].~A() (Implicit destructor) 800 // CHECK: 5: [B11.2].~A() (Implicit destructor) 801 // CHECK: Predecessors (1): B6 802 // CHECK: Successors (1): B0 803 // CHECK: [ B6 ] 804 // CHECK: 1: UV 805 // CHECK: 2: [B6.1] 806 // CHECK: T: if [B6.2] 807 // CHECK: Predecessors (1): B8 808 // CHECK: Successors (2): B5 B4 809 // CHECK: [ B7 ] 810 // CHECK: 1: [B10.2].~A() (Implicit destructor) 811 // CHECK: T: continue; 812 // CHECK: Predecessors (1): B8 813 // CHECK: Successors (1): B3 814 // CHECK: [ B8 ] 815 // CHECK: 1: UV 816 // CHECK: 2: [B8.1] 817 // CHECK: T: if [B8.2] 818 // CHECK: Predecessors (1): B10 819 // CHECK: Successors (2): B7 B6 820 // CHECK: [ B9 ] 821 // CHECK: 1: [B10.2].~A() (Implicit destructor) 822 // CHECK: T: break; 823 // CHECK: Predecessors (1): B10 824 // CHECK: Successors (1): B1 825 // CHECK: [ B10 ] 826 // CHECK: 1: 827 // CHECK: 2: A d; 828 // CHECK: 3: UV 829 // CHECK: 4: [B10.3] 830 // CHECK: T: if [B10.4] 831 // CHECK: Predecessors (1): B2 832 // CHECK: Successors (2): B9 B8 833 // CHECK: [ B11 ] 834 // CHECK: 1: 835 // CHECK: 2: A a; 836 // CHECK: 3: 837 // CHECK: 4: A b; 838 // CHECK: Predecessors (1): B12 839 // CHECK: Successors (1): B2 840 // CHECK: [ B0 (EXIT) ] 841 // CHECK: Predecessors (2): B1 B5 842 // CHECK: Successors (0): 843 // CHECK: [ B3 (ENTRY) ] 844 // CHECK: Predecessors (0): 845 // CHECK: Successors (1): B0 846 // CHECK: [ B1 ] 847 // CHECK: T: try ... 848 // CHECK: Predecessors (0): 849 // CHECK: Successors (2): B2 B0 850 // CHECK: [ B2 ] 851 // CHECK: catch (const A &e): 852 // CHECK: Predecessors (1): B1 853 // CHECK: Successors (1): B0 854 // CHECK: [ B0 (EXIT) ] 855 // CHECK: Predecessors (3): B2 B1 B3 856 // CHECK: Successors (0): 857 // CHECK: [ B3 (ENTRY) ] 858 // CHECK: Predecessors (0): 859 // CHECK: Successors (1): B0 860 // CHECK: [ B1 ] 861 // CHECK: T: try ... 862 // CHECK: Predecessors (0): 863 // CHECK: Successors (2): B2 B0 864 // CHECK: [ B2 ] 865 // CHECK: catch (A e): 866 // CHECK: 1: .~A() (Implicit destructor) 867 // CHECK: Predecessors (1): B1 868 // CHECK: Successors (1): B0 869 // CHECK: [ B0 (EXIT) ] 870 // CHECK: Predecessors (3): B2 B1 B3 871 // CHECK: Successors (0): 872 873