GoPLS Viewer

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