Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / go / analysis / passes / unreachable / testdata / src / a / a.go
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 }