github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/cmd/vet/test_deadcode.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build vet_test 6 // +build ignore 7 8 // This file contains tests for the dead code checker. 9 10 package main 11 12 type T int 13 14 var x interface{} 15 var c chan int 16 17 func external() int // ok 18 19 func _() int { 20 } 21 22 func _() int { 23 print(1) 24 } 25 26 func _() int { 27 print(1) 28 return 2 29 println() // ERROR "unreachable code" 30 } 31 32 func _() int { 33 L: 34 print(1) 35 goto L 36 println() // ERROR "unreachable code" 37 } 38 39 func _() int { 40 print(1) 41 panic(2) 42 println() // ERROR "unreachable code" 43 } 44 45 // but only builtin panic 46 func _() int { 47 var panic = func(int) {} 48 print(1) 49 panic(2) 50 println() // ok 51 } 52 53 func _() int { 54 { 55 print(1) 56 return 2 57 println() // ERROR "unreachable code" 58 } 59 println() // ok 60 } 61 62 func _() int { 63 { 64 print(1) 65 return 2 66 } 67 println() // ERROR "unreachable code" 68 } 69 70 func _() int { 71 L: 72 { 73 print(1) 74 goto L 75 println() // ERROR "unreachable code" 76 } 77 println() // ok 78 } 79 80 func _() int { 81 L: 82 { 83 print(1) 84 goto L 85 } 86 println() // ERROR "unreachable code" 87 } 88 89 func _() int { 90 print(1) 91 { 92 panic(2) 93 } 94 } 95 96 func _() int { 97 print(1) 98 { 99 panic(2) 100 println() // ERROR "unreachable code" 101 } 102 } 103 104 func _() int { 105 print(1) 106 { 107 panic(2) 108 } 109 println() // ERROR "unreachable code" 110 } 111 112 func _() int { 113 print(1) 114 return 2 115 { // ERROR "unreachable code" 116 } 117 } 118 119 func _() int { 120 L: 121 print(1) 122 goto L 123 { // ERROR "unreachable code" 124 } 125 } 126 127 func _() int { 128 print(1) 129 panic(2) 130 { // ERROR "unreachable code" 131 } 132 } 133 134 func _() int { 135 { 136 print(1) 137 return 2 138 { // ERROR "unreachable code" 139 } 140 } 141 } 142 143 func _() int { 144 L: 145 { 146 print(1) 147 goto L 148 { // ERROR "unreachable code" 149 } 150 } 151 } 152 153 func _() int { 154 print(1) 155 { 156 panic(2) 157 { // ERROR "unreachable code" 158 } 159 } 160 } 161 162 func _() int { 163 { 164 print(1) 165 return 2 166 } 167 { // ERROR "unreachable code" 168 } 169 } 170 171 func _() int { 172 L: 173 { 174 print(1) 175 goto L 176 } 177 { // ERROR "unreachable code" 178 } 179 } 180 181 func _() int { 182 print(1) 183 { 184 panic(2) 185 } 186 { // ERROR "unreachable code" 187 } 188 } 189 190 func _() int { 191 print(1) 192 if x == nil { 193 panic(2) 194 } else { 195 panic(3) 196 } 197 println() // ERROR "unreachable code" 198 } 199 200 func _() int { 201 L: 202 print(1) 203 if x == nil { 204 panic(2) 205 } else { 206 goto L 207 } 208 println() // ERROR "unreachable code" 209 } 210 211 func _() int { 212 L: 213 print(1) 214 if x == nil { 215 panic(2) 216 } else if x == 1 { 217 return 0 218 } else if x != 2 { 219 panic(3) 220 } else { 221 goto L 222 } 223 println() // ERROR "unreachable code" 224 } 225 226 // if-else chain missing final else is not okay, even if the 227 // conditions cover every possible case. 228 229 func _() int { 230 print(1) 231 if x == nil { 232 panic(2) 233 } else if x != nil { 234 panic(3) 235 } 236 println() // ok 237 } 238 239 func _() int { 240 print(1) 241 if x == nil { 242 panic(2) 243 } 244 println() // ok 245 } 246 247 func _() int { 248 L: 249 print(1) 250 if x == nil { 251 panic(2) 252 } else if x == 1 { 253 return 0 254 } else if x != 1 { 255 panic(3) 256 } 257 println() // ok 258 } 259 260 func _() int { 261 print(1) 262 for { 263 } 264 println() // ERROR "unreachable code" 265 } 266 267 func _() int { 268 for { 269 for { 270 break 271 } 272 } 273 println() // ERROR "unreachable code" 274 } 275 276 func _() int { 277 for { 278 for { 279 break 280 println() // ERROR "unreachable code" 281 } 282 } 283 } 284 285 func _() int { 286 for { 287 for { 288 continue 289 println() // ERROR "unreachable code" 290 } 291 } 292 } 293 294 func _() int { 295 for { 296 L: 297 for { 298 break L 299 } 300 } 301 println() // ERROR "unreachable code" 302 } 303 304 func _() int { 305 print(1) 306 for { 307 break 308 } 309 println() // ok 310 } 311 312 func _() int { 313 for { 314 for { 315 } 316 break // ERROR "unreachable code" 317 } 318 println() // ok 319 } 320 321 func _() int { 322 L: 323 for { 324 for { 325 break L 326 } 327 } 328 println() // ok 329 } 330 331 func _() int { 332 print(1) 333 for x == nil { 334 } 335 println() // ok 336 } 337 338 func _() int { 339 for x == nil { 340 for { 341 break 342 } 343 } 344 println() // ok 345 } 346 347 func _() int { 348 for x == nil { 349 L: 350 for { 351 break L 352 } 353 } 354 println() // ok 355 } 356 357 func _() int { 358 print(1) 359 for true { 360 } 361 println() // ok 362 } 363 364 func _() int { 365 for true { 366 for { 367 break 368 } 369 } 370 println() // ok 371 } 372 373 func _() int { 374 for true { 375 L: 376 for { 377 break L 378 } 379 } 380 println() // ok 381 } 382 383 func _() int { 384 print(1) 385 select {} 386 println() // ERROR "unreachable code" 387 } 388 389 func _() int { 390 print(1) 391 select { 392 case <-c: 393 print(2) 394 panic("abc") 395 println() // ERROR "unreachable code" 396 } 397 } 398 399 func _() int { 400 print(1) 401 select { 402 case <-c: 403 print(2) 404 panic("abc") 405 } 406 println() // ERROR "unreachable code" 407 } 408 409 func _() int { 410 print(1) 411 select { 412 case <-c: 413 print(2) 414 for { 415 } 416 println() // ERROR "unreachable code" 417 } 418 } 419 420 func _() int { 421 print(1) 422 select { 423 case <-c: 424 print(2) 425 for { 426 } 427 } 428 println() // ERROR "unreachable code" 429 } 430 431 func _() int { 432 L: 433 print(1) 434 select { 435 case <-c: 436 print(2) 437 panic("abc") 438 println() // ERROR "unreachable code" 439 case c <- 1: 440 print(2) 441 goto L 442 println() // ERROR "unreachable code" 443 } 444 } 445 446 func _() int { 447 L: 448 print(1) 449 select { 450 case <-c: 451 print(2) 452 panic("abc") 453 case c <- 1: 454 print(2) 455 goto L 456 } 457 println() // ERROR "unreachable code" 458 } 459 460 func _() int { 461 print(1) 462 select { 463 case <-c: 464 print(2) 465 panic("abc") 466 println() // ERROR "unreachable code" 467 default: 468 select {} 469 println() // ERROR "unreachable code" 470 } 471 } 472 473 func _() int { 474 print(1) 475 select { 476 case <-c: 477 print(2) 478 panic("abc") 479 default: 480 select {} 481 } 482 println() // ERROR "unreachable code" 483 } 484 485 func _() int { 486 print(1) 487 select { 488 case <-c: 489 print(2) 490 } 491 println() // ok 492 } 493 494 func _() int { 495 L: 496 print(1) 497 select { 498 case <-c: 499 print(2) 500 panic("abc") 501 goto L // ERROR "unreachable code" 502 case c <- 1: 503 print(2) 504 } 505 println() // ok 506 } 507 508 func _() int { 509 print(1) 510 select { 511 case <-c: 512 print(2) 513 panic("abc") 514 default: 515 print(2) 516 } 517 println() // ok 518 } 519 520 func _() int { 521 print(1) 522 select { 523 default: 524 break 525 } 526 println() // ok 527 } 528 529 func _() int { 530 print(1) 531 select { 532 case <-c: 533 print(2) 534 panic("abc") 535 break // ERROR "unreachable code" 536 } 537 println() // ok 538 } 539 540 func _() int { 541 print(1) 542 L: 543 select { 544 case <-c: 545 print(2) 546 for { 547 break L 548 } 549 } 550 println() // ok 551 } 552 553 func _() int { 554 print(1) 555 L: 556 select { 557 case <-c: 558 print(2) 559 panic("abc") 560 case c <- 1: 561 print(2) 562 break L 563 } 564 println() // ok 565 } 566 567 func _() int { 568 print(1) 569 select { 570 case <-c: 571 print(1) 572 panic("abc") 573 default: 574 select {} 575 break // ERROR "unreachable code" 576 } 577 println() // ok 578 } 579 580 func _() int { 581 print(1) 582 switch x { 583 case 1: 584 print(2) 585 panic(3) 586 println() // ERROR "unreachable code" 587 default: 588 return 4 589 println() // ERROR "unreachable code" 590 } 591 } 592 593 func _() int { 594 print(1) 595 switch x { 596 case 1: 597 print(2) 598 panic(3) 599 default: 600 return 4 601 } 602 println() // ERROR "unreachable code" 603 } 604 605 func _() int { 606 print(1) 607 switch x { 608 default: 609 return 4 610 println() // ERROR "unreachable code" 611 case 1: 612 print(2) 613 panic(3) 614 println() // ERROR "unreachable code" 615 } 616 } 617 618 func _() int { 619 print(1) 620 switch x { 621 default: 622 return 4 623 case 1: 624 print(2) 625 panic(3) 626 } 627 println() // ERROR "unreachable code" 628 } 629 630 func _() int { 631 print(1) 632 switch x { 633 case 1: 634 print(2) 635 fallthrough 636 default: 637 return 4 638 println() // ERROR "unreachable code" 639 } 640 } 641 642 func _() int { 643 print(1) 644 switch x { 645 case 1: 646 print(2) 647 fallthrough 648 default: 649 return 4 650 } 651 println() // ERROR "unreachable code" 652 } 653 654 func _() int { 655 print(1) 656 switch { 657 } 658 println() // ok 659 } 660 661 func _() int { 662 print(1) 663 switch x { 664 case 1: 665 print(2) 666 panic(3) 667 case 2: 668 return 4 669 } 670 println() // ok 671 } 672 673 func _() int { 674 print(1) 675 switch x { 676 case 2: 677 return 4 678 case 1: 679 print(2) 680 panic(3) 681 } 682 println() // ok 683 } 684 685 func _() int { 686 print(1) 687 switch x { 688 case 1: 689 print(2) 690 fallthrough 691 case 2: 692 return 4 693 } 694 println() // ok 695 } 696 697 func _() int { 698 print(1) 699 switch x { 700 case 1: 701 print(2) 702 panic(3) 703 } 704 println() // ok 705 } 706 707 func _() int { 708 print(1) 709 L: 710 switch x { 711 case 1: 712 print(2) 713 panic(3) 714 break L // ERROR "unreachable code" 715 default: 716 return 4 717 } 718 println() // ok 719 } 720 721 func _() int { 722 print(1) 723 switch x { 724 default: 725 return 4 726 break // ERROR "unreachable code" 727 case 1: 728 print(2) 729 panic(3) 730 } 731 println() // ok 732 } 733 734 func _() int { 735 print(1) 736 L: 737 switch x { 738 case 1: 739 print(2) 740 for { 741 break L 742 } 743 default: 744 return 4 745 } 746 println() // ok 747 } 748 749 func _() int { 750 print(1) 751 switch x.(type) { 752 case int: 753 print(2) 754 panic(3) 755 println() // ERROR "unreachable code" 756 default: 757 return 4 758 println() // ERROR "unreachable code" 759 } 760 } 761 762 func _() int { 763 print(1) 764 switch x.(type) { 765 case int: 766 print(2) 767 panic(3) 768 default: 769 return 4 770 } 771 println() // ERROR "unreachable code" 772 } 773 774 func _() int { 775 print(1) 776 switch x.(type) { 777 default: 778 return 4 779 println() // ERROR "unreachable code" 780 case int: 781 print(2) 782 panic(3) 783 println() // ERROR "unreachable code" 784 } 785 } 786 787 func _() int { 788 print(1) 789 switch x.(type) { 790 default: 791 return 4 792 case int: 793 print(2) 794 panic(3) 795 } 796 println() // ERROR "unreachable code" 797 } 798 799 func _() int { 800 print(1) 801 switch x.(type) { 802 case int: 803 print(2) 804 fallthrough 805 default: 806 return 4 807 println() // ERROR "unreachable code" 808 } 809 } 810 811 func _() int { 812 print(1) 813 switch x.(type) { 814 case int: 815 print(2) 816 fallthrough 817 default: 818 return 4 819 } 820 println() // ERROR "unreachable code" 821 } 822 823 func _() int { 824 print(1) 825 switch { 826 } 827 println() // ok 828 } 829 830 func _() int { 831 print(1) 832 switch x.(type) { 833 case int: 834 print(2) 835 panic(3) 836 case float64: 837 return 4 838 } 839 println() // ok 840 } 841 842 func _() int { 843 print(1) 844 switch x.(type) { 845 case float64: 846 return 4 847 case int: 848 print(2) 849 panic(3) 850 } 851 println() // ok 852 } 853 854 func _() int { 855 print(1) 856 switch x.(type) { 857 case int: 858 print(2) 859 fallthrough 860 case float64: 861 return 4 862 } 863 println() // ok 864 } 865 866 func _() int { 867 print(1) 868 switch x.(type) { 869 case int: 870 print(2) 871 panic(3) 872 } 873 println() // ok 874 } 875 876 func _() int { 877 print(1) 878 L: 879 switch x.(type) { 880 case int: 881 print(2) 882 panic(3) 883 break L // ERROR "unreachable code" 884 default: 885 return 4 886 } 887 println() // ok 888 } 889 890 func _() int { 891 print(1) 892 switch x.(type) { 893 default: 894 return 4 895 break // ERROR "unreachable code" 896 case int: 897 print(2) 898 panic(3) 899 } 900 println() // ok 901 } 902 903 func _() int { 904 print(1) 905 L: 906 switch x.(type) { 907 case int: 908 print(2) 909 for { 910 break L 911 } 912 default: 913 return 4 914 } 915 println() // ok 916 } 917 918 // again, but without the leading print(1). 919 // testing that everything works when the terminating statement is first. 920 921 func _() int { 922 println() // ok 923 } 924 925 func _() int { 926 return 2 927 println() // ERROR "unreachable code" 928 } 929 930 func _() int { 931 L: 932 goto L 933 println() // ERROR "unreachable code" 934 } 935 936 func _() int { 937 panic(2) 938 println() // ERROR "unreachable code" 939 } 940 941 // but only builtin panic 942 func _() int { 943 var panic = func(int) {} 944 panic(2) 945 println() // ok 946 } 947 948 func _() int { 949 { 950 return 2 951 println() // ERROR "unreachable code" 952 } 953 } 954 955 func _() int { 956 { 957 return 2 958 } 959 println() // ERROR "unreachable code" 960 } 961 962 func _() int { 963 L: 964 { 965 goto L 966 println() // ERROR "unreachable code" 967 } 968 } 969 970 func _() int { 971 L: 972 { 973 goto L 974 } 975 println() // ERROR "unreachable code" 976 } 977 978 func _() int { 979 { 980 panic(2) 981 println() // ERROR "unreachable code" 982 } 983 } 984 985 func _() int { 986 { 987 panic(2) 988 } 989 println() // ERROR "unreachable code" 990 } 991 992 func _() int { 993 return 2 994 { // ERROR "unreachable code" 995 } 996 println() // ok 997 } 998 999 func _() int { 1000 L: 1001 goto L 1002 { // ERROR "unreachable code" 1003 } 1004 println() // ok 1005 } 1006 1007 func _() int { 1008 panic(2) 1009 { // ERROR "unreachable code" 1010 } 1011 println() // ok 1012 } 1013 1014 func _() int { 1015 { 1016 return 2 1017 { // ERROR "unreachable code" 1018 } 1019 } 1020 println() // ok 1021 } 1022 1023 func _() int { 1024 L: 1025 { 1026 goto L 1027 { // ERROR "unreachable code" 1028 } 1029 } 1030 println() // ok 1031 } 1032 1033 func _() int { 1034 { 1035 panic(2) 1036 { // ERROR "unreachable code" 1037 } 1038 } 1039 println() // ok 1040 } 1041 1042 func _() int { 1043 { 1044 return 2 1045 } 1046 { // ERROR "unreachable code" 1047 } 1048 println() // ok 1049 } 1050 1051 func _() int { 1052 L: 1053 { 1054 goto L 1055 } 1056 { // ERROR "unreachable code" 1057 } 1058 println() // ok 1059 } 1060 1061 func _() int { 1062 { 1063 panic(2) 1064 } 1065 { // ERROR "unreachable code" 1066 } 1067 println() // ok 1068 } 1069 1070 // again, with func literals 1071 1072 var _ = func() int { 1073 } 1074 1075 var _ = func() int { 1076 print(1) 1077 } 1078 1079 var _ = func() int { 1080 print(1) 1081 return 2 1082 println() // ERROR "unreachable code" 1083 } 1084 1085 var _ = func() int { 1086 L: 1087 print(1) 1088 goto L 1089 println() // ERROR "unreachable code" 1090 } 1091 1092 var _ = func() int { 1093 print(1) 1094 panic(2) 1095 println() // ERROR "unreachable code" 1096 } 1097 1098 // but only builtin panic 1099 var _ = func() int { 1100 var panic = func(int) {} 1101 print(1) 1102 panic(2) 1103 println() // ok 1104 } 1105 1106 var _ = func() int { 1107 { 1108 print(1) 1109 return 2 1110 println() // ERROR "unreachable code" 1111 } 1112 println() // ok 1113 } 1114 1115 var _ = func() int { 1116 { 1117 print(1) 1118 return 2 1119 } 1120 println() // ERROR "unreachable code" 1121 } 1122 1123 var _ = func() int { 1124 L: 1125 { 1126 print(1) 1127 goto L 1128 println() // ERROR "unreachable code" 1129 } 1130 println() // ok 1131 } 1132 1133 var _ = func() int { 1134 L: 1135 { 1136 print(1) 1137 goto L 1138 } 1139 println() // ERROR "unreachable code" 1140 } 1141 1142 var _ = func() int { 1143 print(1) 1144 { 1145 panic(2) 1146 } 1147 } 1148 1149 var _ = func() int { 1150 print(1) 1151 { 1152 panic(2) 1153 println() // ERROR "unreachable code" 1154 } 1155 } 1156 1157 var _ = func() int { 1158 print(1) 1159 { 1160 panic(2) 1161 } 1162 println() // ERROR "unreachable code" 1163 } 1164 1165 var _ = func() int { 1166 print(1) 1167 return 2 1168 { // ERROR "unreachable code" 1169 } 1170 } 1171 1172 var _ = func() int { 1173 L: 1174 print(1) 1175 goto L 1176 { // ERROR "unreachable code" 1177 } 1178 } 1179 1180 var _ = func() int { 1181 print(1) 1182 panic(2) 1183 { // ERROR "unreachable code" 1184 } 1185 } 1186 1187 var _ = func() int { 1188 { 1189 print(1) 1190 return 2 1191 { // ERROR "unreachable code" 1192 } 1193 } 1194 } 1195 1196 var _ = func() int { 1197 L: 1198 { 1199 print(1) 1200 goto L 1201 { // ERROR "unreachable code" 1202 } 1203 } 1204 } 1205 1206 var _ = func() int { 1207 print(1) 1208 { 1209 panic(2) 1210 { // ERROR "unreachable code" 1211 } 1212 } 1213 } 1214 1215 var _ = func() int { 1216 { 1217 print(1) 1218 return 2 1219 } 1220 { // ERROR "unreachable code" 1221 } 1222 } 1223 1224 var _ = func() int { 1225 L: 1226 { 1227 print(1) 1228 goto L 1229 } 1230 { // ERROR "unreachable code" 1231 } 1232 } 1233 1234 var _ = func() int { 1235 print(1) 1236 { 1237 panic(2) 1238 } 1239 { // ERROR "unreachable code" 1240 } 1241 } 1242 1243 var _ = func() int { 1244 print(1) 1245 if x == nil { 1246 panic(2) 1247 } else { 1248 panic(3) 1249 } 1250 println() // ERROR "unreachable code" 1251 } 1252 1253 var _ = func() int { 1254 L: 1255 print(1) 1256 if x == nil { 1257 panic(2) 1258 } else { 1259 goto L 1260 } 1261 println() // ERROR "unreachable code" 1262 } 1263 1264 var _ = func() int { 1265 L: 1266 print(1) 1267 if x == nil { 1268 panic(2) 1269 } else if x == 1 { 1270 return 0 1271 } else if x != 2 { 1272 panic(3) 1273 } else { 1274 goto L 1275 } 1276 println() // ERROR "unreachable code" 1277 } 1278 1279 // if-else chain missing final else is not okay, even if the 1280 // conditions cover every possible case. 1281 1282 var _ = func() int { 1283 print(1) 1284 if x == nil { 1285 panic(2) 1286 } else if x != nil { 1287 panic(3) 1288 } 1289 println() // ok 1290 } 1291 1292 var _ = func() int { 1293 print(1) 1294 if x == nil { 1295 panic(2) 1296 } 1297 println() // ok 1298 } 1299 1300 var _ = func() int { 1301 L: 1302 print(1) 1303 if x == nil { 1304 panic(2) 1305 } else if x == 1 { 1306 return 0 1307 } else if x != 1 { 1308 panic(3) 1309 } 1310 println() // ok 1311 } 1312 1313 var _ = func() int { 1314 print(1) 1315 for { 1316 } 1317 println() // ERROR "unreachable code" 1318 } 1319 1320 var _ = func() int { 1321 for { 1322 for { 1323 break 1324 } 1325 } 1326 println() // ERROR "unreachable code" 1327 } 1328 1329 var _ = func() int { 1330 for { 1331 for { 1332 break 1333 println() // ERROR "unreachable code" 1334 } 1335 } 1336 } 1337 1338 var _ = func() int { 1339 for { 1340 for { 1341 continue 1342 println() // ERROR "unreachable code" 1343 } 1344 } 1345 } 1346 1347 var _ = func() int { 1348 for { 1349 L: 1350 for { 1351 break L 1352 } 1353 } 1354 println() // ERROR "unreachable code" 1355 } 1356 1357 var _ = func() int { 1358 print(1) 1359 for { 1360 break 1361 } 1362 println() // ok 1363 } 1364 1365 var _ = func() int { 1366 for { 1367 for { 1368 } 1369 break // ERROR "unreachable code" 1370 } 1371 println() // ok 1372 } 1373 1374 var _ = func() int { 1375 L: 1376 for { 1377 for { 1378 break L 1379 } 1380 } 1381 println() // ok 1382 } 1383 1384 var _ = func() int { 1385 print(1) 1386 for x == nil { 1387 } 1388 println() // ok 1389 } 1390 1391 var _ = func() int { 1392 for x == nil { 1393 for { 1394 break 1395 } 1396 } 1397 println() // ok 1398 } 1399 1400 var _ = func() int { 1401 for x == nil { 1402 L: 1403 for { 1404 break L 1405 } 1406 } 1407 println() // ok 1408 } 1409 1410 var _ = func() int { 1411 print(1) 1412 for true { 1413 } 1414 println() // ok 1415 } 1416 1417 var _ = func() int { 1418 for true { 1419 for { 1420 break 1421 } 1422 } 1423 println() // ok 1424 } 1425 1426 var _ = func() int { 1427 for true { 1428 L: 1429 for { 1430 break L 1431 } 1432 } 1433 println() // ok 1434 } 1435 1436 var _ = func() int { 1437 print(1) 1438 select {} 1439 println() // ERROR "unreachable code" 1440 } 1441 1442 var _ = func() int { 1443 print(1) 1444 select { 1445 case <-c: 1446 print(2) 1447 panic("abc") 1448 println() // ERROR "unreachable code" 1449 } 1450 } 1451 1452 var _ = func() int { 1453 print(1) 1454 select { 1455 case <-c: 1456 print(2) 1457 panic("abc") 1458 } 1459 println() // ERROR "unreachable code" 1460 } 1461 1462 var _ = func() int { 1463 print(1) 1464 select { 1465 case <-c: 1466 print(2) 1467 for { 1468 } 1469 println() // ERROR "unreachable code" 1470 } 1471 } 1472 1473 var _ = func() int { 1474 print(1) 1475 select { 1476 case <-c: 1477 print(2) 1478 for { 1479 } 1480 } 1481 println() // ERROR "unreachable code" 1482 } 1483 1484 var _ = func() int { 1485 L: 1486 print(1) 1487 select { 1488 case <-c: 1489 print(2) 1490 panic("abc") 1491 println() // ERROR "unreachable code" 1492 case c <- 1: 1493 print(2) 1494 goto L 1495 println() // ERROR "unreachable code" 1496 } 1497 } 1498 1499 var _ = func() int { 1500 L: 1501 print(1) 1502 select { 1503 case <-c: 1504 print(2) 1505 panic("abc") 1506 case c <- 1: 1507 print(2) 1508 goto L 1509 } 1510 println() // ERROR "unreachable code" 1511 } 1512 1513 var _ = func() int { 1514 print(1) 1515 select { 1516 case <-c: 1517 print(2) 1518 panic("abc") 1519 println() // ERROR "unreachable code" 1520 default: 1521 select {} 1522 println() // ERROR "unreachable code" 1523 } 1524 } 1525 1526 var _ = func() int { 1527 print(1) 1528 select { 1529 case <-c: 1530 print(2) 1531 panic("abc") 1532 default: 1533 select {} 1534 } 1535 println() // ERROR "unreachable code" 1536 } 1537 1538 var _ = func() int { 1539 print(1) 1540 select { 1541 case <-c: 1542 print(2) 1543 } 1544 println() // ok 1545 } 1546 1547 var _ = func() int { 1548 L: 1549 print(1) 1550 select { 1551 case <-c: 1552 print(2) 1553 panic("abc") 1554 goto L // ERROR "unreachable code" 1555 case c <- 1: 1556 print(2) 1557 } 1558 println() // ok 1559 } 1560 1561 var _ = func() int { 1562 print(1) 1563 select { 1564 case <-c: 1565 print(2) 1566 panic("abc") 1567 default: 1568 print(2) 1569 } 1570 println() // ok 1571 } 1572 1573 var _ = func() int { 1574 print(1) 1575 select { 1576 default: 1577 break 1578 } 1579 println() // ok 1580 } 1581 1582 var _ = func() int { 1583 print(1) 1584 select { 1585 case <-c: 1586 print(2) 1587 panic("abc") 1588 break // ERROR "unreachable code" 1589 } 1590 println() // ok 1591 } 1592 1593 var _ = func() int { 1594 print(1) 1595 L: 1596 select { 1597 case <-c: 1598 print(2) 1599 for { 1600 break L 1601 } 1602 } 1603 println() // ok 1604 } 1605 1606 var _ = func() int { 1607 print(1) 1608 L: 1609 select { 1610 case <-c: 1611 print(2) 1612 panic("abc") 1613 case c <- 1: 1614 print(2) 1615 break L 1616 } 1617 println() // ok 1618 } 1619 1620 var _ = func() int { 1621 print(1) 1622 select { 1623 case <-c: 1624 print(1) 1625 panic("abc") 1626 default: 1627 select {} 1628 break // ERROR "unreachable code" 1629 } 1630 println() // ok 1631 } 1632 1633 var _ = func() int { 1634 print(1) 1635 switch x { 1636 case 1: 1637 print(2) 1638 panic(3) 1639 println() // ERROR "unreachable code" 1640 default: 1641 return 4 1642 println() // ERROR "unreachable code" 1643 } 1644 } 1645 1646 var _ = func() int { 1647 print(1) 1648 switch x { 1649 case 1: 1650 print(2) 1651 panic(3) 1652 default: 1653 return 4 1654 } 1655 println() // ERROR "unreachable code" 1656 } 1657 1658 var _ = func() int { 1659 print(1) 1660 switch x { 1661 default: 1662 return 4 1663 println() // ERROR "unreachable code" 1664 case 1: 1665 print(2) 1666 panic(3) 1667 println() // ERROR "unreachable code" 1668 } 1669 } 1670 1671 var _ = func() int { 1672 print(1) 1673 switch x { 1674 default: 1675 return 4 1676 case 1: 1677 print(2) 1678 panic(3) 1679 } 1680 println() // ERROR "unreachable code" 1681 } 1682 1683 var _ = func() int { 1684 print(1) 1685 switch x { 1686 case 1: 1687 print(2) 1688 fallthrough 1689 default: 1690 return 4 1691 println() // ERROR "unreachable code" 1692 } 1693 } 1694 1695 var _ = func() int { 1696 print(1) 1697 switch x { 1698 case 1: 1699 print(2) 1700 fallthrough 1701 default: 1702 return 4 1703 } 1704 println() // ERROR "unreachable code" 1705 } 1706 1707 var _ = func() int { 1708 print(1) 1709 switch { 1710 } 1711 println() // ok 1712 } 1713 1714 var _ = func() int { 1715 print(1) 1716 switch x { 1717 case 1: 1718 print(2) 1719 panic(3) 1720 case 2: 1721 return 4 1722 } 1723 println() // ok 1724 } 1725 1726 var _ = func() int { 1727 print(1) 1728 switch x { 1729 case 2: 1730 return 4 1731 case 1: 1732 print(2) 1733 panic(3) 1734 } 1735 println() // ok 1736 } 1737 1738 var _ = func() int { 1739 print(1) 1740 switch x { 1741 case 1: 1742 print(2) 1743 fallthrough 1744 case 2: 1745 return 4 1746 } 1747 println() // ok 1748 } 1749 1750 var _ = func() int { 1751 print(1) 1752 switch x { 1753 case 1: 1754 print(2) 1755 panic(3) 1756 } 1757 println() // ok 1758 } 1759 1760 var _ = func() int { 1761 print(1) 1762 L: 1763 switch x { 1764 case 1: 1765 print(2) 1766 panic(3) 1767 break L // ERROR "unreachable code" 1768 default: 1769 return 4 1770 } 1771 println() // ok 1772 } 1773 1774 var _ = func() int { 1775 print(1) 1776 switch x { 1777 default: 1778 return 4 1779 break // ERROR "unreachable code" 1780 case 1: 1781 print(2) 1782 panic(3) 1783 } 1784 println() // ok 1785 } 1786 1787 var _ = func() int { 1788 print(1) 1789 L: 1790 switch x { 1791 case 1: 1792 print(2) 1793 for { 1794 break L 1795 } 1796 default: 1797 return 4 1798 } 1799 println() // ok 1800 } 1801 1802 var _ = func() int { 1803 print(1) 1804 switch x.(type) { 1805 case int: 1806 print(2) 1807 panic(3) 1808 println() // ERROR "unreachable code" 1809 default: 1810 return 4 1811 println() // ERROR "unreachable code" 1812 } 1813 } 1814 1815 var _ = func() int { 1816 print(1) 1817 switch x.(type) { 1818 case int: 1819 print(2) 1820 panic(3) 1821 default: 1822 return 4 1823 } 1824 println() // ERROR "unreachable code" 1825 } 1826 1827 var _ = func() int { 1828 print(1) 1829 switch x.(type) { 1830 default: 1831 return 4 1832 println() // ERROR "unreachable code" 1833 case int: 1834 print(2) 1835 panic(3) 1836 println() // ERROR "unreachable code" 1837 } 1838 } 1839 1840 var _ = func() int { 1841 print(1) 1842 switch x.(type) { 1843 default: 1844 return 4 1845 case int: 1846 print(2) 1847 panic(3) 1848 } 1849 println() // ERROR "unreachable code" 1850 } 1851 1852 var _ = func() int { 1853 print(1) 1854 switch x.(type) { 1855 case int: 1856 print(2) 1857 fallthrough 1858 default: 1859 return 4 1860 println() // ERROR "unreachable code" 1861 } 1862 } 1863 1864 var _ = func() int { 1865 print(1) 1866 switch x.(type) { 1867 case int: 1868 print(2) 1869 fallthrough 1870 default: 1871 return 4 1872 } 1873 println() // ERROR "unreachable code" 1874 } 1875 1876 var _ = func() int { 1877 print(1) 1878 switch { 1879 } 1880 println() // ok 1881 } 1882 1883 var _ = func() int { 1884 print(1) 1885 switch x.(type) { 1886 case int: 1887 print(2) 1888 panic(3) 1889 case float64: 1890 return 4 1891 } 1892 println() // ok 1893 } 1894 1895 var _ = func() int { 1896 print(1) 1897 switch x.(type) { 1898 case float64: 1899 return 4 1900 case int: 1901 print(2) 1902 panic(3) 1903 } 1904 println() // ok 1905 } 1906 1907 var _ = func() int { 1908 print(1) 1909 switch x.(type) { 1910 case int: 1911 print(2) 1912 fallthrough 1913 case float64: 1914 return 4 1915 } 1916 println() // ok 1917 } 1918 1919 var _ = func() int { 1920 print(1) 1921 switch x.(type) { 1922 case int: 1923 print(2) 1924 panic(3) 1925 } 1926 println() // ok 1927 } 1928 1929 var _ = func() int { 1930 print(1) 1931 L: 1932 switch x.(type) { 1933 case int: 1934 print(2) 1935 panic(3) 1936 break L // ERROR "unreachable code" 1937 default: 1938 return 4 1939 } 1940 println() // ok 1941 } 1942 1943 var _ = func() int { 1944 print(1) 1945 switch x.(type) { 1946 default: 1947 return 4 1948 break // ERROR "unreachable code" 1949 case int: 1950 print(2) 1951 panic(3) 1952 } 1953 println() // ok 1954 } 1955 1956 var _ = func() int { 1957 print(1) 1958 L: 1959 switch x.(type) { 1960 case int: 1961 print(2) 1962 for { 1963 break L 1964 } 1965 default: 1966 return 4 1967 } 1968 println() // ok 1969 } 1970 1971 // again, but without the leading print(1). 1972 // testing that everything works when the terminating statement is first. 1973 1974 var _ = func() int { 1975 println() // ok 1976 } 1977 1978 var _ = func() int { 1979 return 2 1980 println() // ERROR "unreachable code" 1981 } 1982 1983 var _ = func() int { 1984 L: 1985 goto L 1986 println() // ERROR "unreachable code" 1987 } 1988 1989 var _ = func() int { 1990 panic(2) 1991 println() // ERROR "unreachable code" 1992 } 1993 1994 // but only builtin panic 1995 var _ = func() int { 1996 var panic = func(int) {} 1997 panic(2) 1998 println() // ok 1999 } 2000 2001 var _ = func() int { 2002 { 2003 return 2 2004 println() // ERROR "unreachable code" 2005 } 2006 } 2007 2008 var _ = func() int { 2009 { 2010 return 2 2011 } 2012 println() // ERROR "unreachable code" 2013 } 2014 2015 var _ = func() int { 2016 L: 2017 { 2018 goto L 2019 println() // ERROR "unreachable code" 2020 } 2021 } 2022 2023 var _ = func() int { 2024 L: 2025 { 2026 goto L 2027 } 2028 println() // ERROR "unreachable code" 2029 } 2030 2031 var _ = func() int { 2032 { 2033 panic(2) 2034 println() // ERROR "unreachable code" 2035 } 2036 } 2037 2038 var _ = func() int { 2039 { 2040 panic(2) 2041 } 2042 println() // ERROR "unreachable code" 2043 } 2044 2045 var _ = func() int { 2046 return 2 2047 { // ERROR "unreachable code" 2048 } 2049 println() // ok 2050 } 2051 2052 var _ = func() int { 2053 L: 2054 goto L 2055 { // ERROR "unreachable code" 2056 } 2057 println() // ok 2058 } 2059 2060 var _ = func() int { 2061 panic(2) 2062 { // ERROR "unreachable code" 2063 } 2064 println() // ok 2065 } 2066 2067 var _ = func() int { 2068 { 2069 return 2 2070 { // ERROR "unreachable code" 2071 } 2072 } 2073 println() // ok 2074 } 2075 2076 var _ = func() int { 2077 L: 2078 { 2079 goto L 2080 { // ERROR "unreachable code" 2081 } 2082 } 2083 println() // ok 2084 } 2085 2086 var _ = func() int { 2087 { 2088 panic(2) 2089 { // ERROR "unreachable code" 2090 } 2091 } 2092 println() // ok 2093 } 2094 2095 var _ = func() int { 2096 { 2097 return 2 2098 } 2099 { // ERROR "unreachable code" 2100 } 2101 println() // ok 2102 } 2103 2104 var _ = func() int { 2105 L: 2106 { 2107 goto L 2108 } 2109 { // ERROR "unreachable code" 2110 } 2111 println() // ok 2112 } 2113 2114 var _ = func() int { 2115 { 2116 panic(2) 2117 } 2118 { // ERROR "unreachable code" 2119 } 2120 println() // ok 2121 }