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