GoPLS Viewer

Home|gopls/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
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    println() // want "unreachable code"
28}
29
30func _() int {
31L:
32    print(1)
33    goto L
34    println() // want "unreachable code"
35}
36
37func _() int {
38    print(1)
39    panic(2)
40    println() // 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        println() // want "unreachable code"
56    }
57    println() // ok
58}
59
60func _() int {
61    {
62        print(1)
63        return 2
64    }
65    println() // want "unreachable code"
66}
67
68func _() int {
69L:
70    {
71        print(1)
72        goto L
73        println() // want "unreachable code"
74    }
75    println() // ok
76}
77
78func _() int {
79L:
80    {
81        print(1)
82        goto L
83    }
84    println() // 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        println() // want "unreachable code"
99    }
100}
101
102func _() int {
103    print(1)
104    {
105        panic(2)
106    }
107    println() // want "unreachable code"
108}
109
110func _() int {
111    print(1)
112    return 2
113    { // want "unreachable code"
114    }
115}
116
117func _() int {
118L:
119    print(1)
120    goto L
121    { // want "unreachable code"
122    }
123}
124
125func _() int {
126    print(1)
127    panic(2)
128    { // want "unreachable code"
129    }
130}
131
132func _() int {
133    {
134        print(1)
135        return 2
136        { // want "unreachable code"
137        }
138    }
139}
140
141func _() int {
142L:
143    {
144        print(1)
145        goto L
146        { // want "unreachable code"
147        }
148    }
149}
150
151func _() int {
152    print(1)
153    {
154        panic(2)
155        { // want "unreachable code"
156        }
157    }
158}
159
160func _() int {
161    {
162        print(1)
163        return 2
164    }
165    { // want "unreachable code"
166    }
167}
168
169func _() int {
170L:
171    {
172        print(1)
173        goto L
174    }
175    { // want "unreachable code"
176    }
177}
178
179func _() int {
180    print(1)
181    {
182        panic(2)
183    }
184    { // want "unreachable code"
185    }
186}
187
188func _() int {
189    print(1)
190    if x == nil {
191        panic(2)
192    } else {
193        panic(3)
194    }
195    println() // want "unreachable code"
196}
197
198func _() int {
199L:
200    print(1)
201    if x == nil {
202        panic(2)
203    } else {
204        goto L
205    }
206    println() // want "unreachable code"
207}
208
209func _() int {
210L:
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
227func _() 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
237func _() int {
238    print(1)
239    if x == nil {
240        panic(2)
241    }
242    println() // ok
243}
244
245func _() int {
246L:
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
258func _() int {
259    print(1)
260    for {
261    }
262    println() // want "unreachable code"
263}
264
265func _() int {
266    for {
267        for {
268            break
269        }
270    }
271    println() // want "unreachable code"
272}
273
274func _() int {
275    for {
276        for {
277            break
278            println() // want "unreachable code"
279        }
280    }
281}
282
283func _() int {
284    for {
285        for {
286            continue
287            println() // want "unreachable code"
288        }
289    }
290}
291
292func _() int {
293    for {
294    L:
295        for {
296            break L
297        }
298    }
299    println() // want "unreachable code"
300}
301
302func _() int {
303    print(1)
304    for {
305        break
306    }
307    println() // ok
308}
309
310func _() int {
311    for {
312        for {
313        }
314        break // want "unreachable code"
315    }
316    println() // ok
317}
318
319func _() int {
320L:
321    for {
322        for {
323            break L
324        }
325    }
326    println() // ok
327}
328
329func _() int {
330    print(1)
331    for x == nil {
332    }
333    println() // ok
334}
335
336func _() int {
337    for x == nil {
338        for {
339            break
340        }
341    }
342    println() // ok
343}
344
345func _() int {
346    for x == nil {
347    L:
348        for {
349            break L
350        }
351    }
352    println() // ok
353}
354
355func _() int {
356    print(1)
357    for true {
358    }
359    println() // ok
360}
361
362func _() int {
363    for true {
364        for {
365            break
366        }
367    }
368    println() // ok
369}
370
371func _() int {
372    for true {
373    L:
374        for {
375            break L
376        }
377    }
378    println() // ok
379}
380
381func _() int {
382    print(1)
383    select {}
384    println() // want "unreachable code"
385}
386
387func _() int {
388    print(1)
389    select {
390    case <-c:
391        print(2)
392        panic("abc")
393        println() // want "unreachable code"
394    }
395}
396
397func _() int {
398    print(1)
399    select {
400    case <-c:
401        print(2)
402        panic("abc")
403    }
404    println() // want "unreachable code"
405}
406
407func _() int {
408    print(1)
409    select {
410    case <-c:
411        print(2)
412        for {
413        }
414        println() // want "unreachable code"
415    }
416}
417
418func _() int {
419    print(1)
420    select {
421    case <-c:
422        print(2)
423        for {
424        }
425    }
426    println() // want "unreachable code"
427}
428
429func _() int {
430L:
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
444func _() int {
445L:
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
458func _() 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
471func _() 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
483func _() int {
484    print(1)
485    select {
486    case <-c:
487        print(2)
488    }
489    println() // ok
490}
491
492func _() int {
493L:
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
506func _() 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
518func _() int {
519    print(1)
520    select {
521    default:
522        break
523    }
524    println() // ok
525}
526
527func _() 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
538func _() int {
539    print(1)
540L:
541    select {
542    case <-c:
543        print(2)
544        for {
545            break L
546        }
547    }
548    println() // ok
549}
550
551func _() int {
552    print(1)
553L:
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
565func _() 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
578func _() 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
591func _() 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
603func _() 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
616func _() 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
628func _() 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
640func _() 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
652func _() int {
653    print(1)
654    switch {
655    }
656    println() // ok
657}
658
659func _() 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
671func _() 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
683func _() 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
695func _() int {
696    print(1)
697    switch x {
698    case 1:
699        print(2)
700        panic(3)
701    }
702    println() // ok
703}
704
705func _() int {
706    print(1)
707L:
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
719func _() 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
732func _() int {
733    print(1)
734L:
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
747func _() 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
760func _() 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
772func _() 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
785func _() 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
797func _() 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
809func _() 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
821func _() int {
822    print(1)
823    switch {
824    }
825    println() // ok
826}
827
828func _() 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
840func _() 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
852func _() 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
864func _() int {
865    print(1)
866    switch x.(type) {
867    case int:
868        print(2)
869        panic(3)
870    }
871    println() // ok
872}
873
874func _() int {
875    print(1)
876L:
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
888func _() 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
901func _() int {
902    print(1)
903L:
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
919func _() int {
920    println() // ok
921}
922
923func _() int {
924    return 2
925    println() // want "unreachable code"
926}
927
928func _() int {
929L:
930    goto L
931    println() // want "unreachable code"
932}
933
934func _() int {
935    panic(2)
936    println() // want "unreachable code"
937}
938
939// but only builtin panic
940func _() int {
941    var panic = func(int) {}
942    panic(2)
943    println() // ok
944}
945
946func _() int {
947    {
948        return 2
949        println() // want "unreachable code"
950    }
951}
952
953func _() int {
954    {
955        return 2
956    }
957    println() // want "unreachable code"
958}
959
960func _() int {
961L:
962    {
963        goto L
964        println() // want "unreachable code"
965    }
966}
967
968func _() int {
969L:
970    {
971        goto L
972    }
973    println() // want "unreachable code"
974}
975
976func _() int {
977    {
978        panic(2)
979        println() // want "unreachable code"
980    }
981}
982
983func _() int {
984    {
985        panic(2)
986    }
987    println() // want "unreachable code"
988}
989
990func _() int {
991    return 2
992    { // want "unreachable code"
993    }
994    println() // ok
995}
996
997func _() int {
998L:
999    goto L
1000    { // want "unreachable code"
1001    }
1002    println() // ok
1003}
1004
1005func _() int {
1006    panic(2)
1007    { // want "unreachable code"
1008    }
1009    println() // ok
1010}
1011
1012func _() int {
1013    {
1014        return 2
1015        { // want "unreachable code"
1016        }
1017    }
1018    println() // ok
1019}
1020
1021func _() int {
1022L:
1023    {
1024        goto L
1025        { // want "unreachable code"
1026        }
1027    }
1028    println() // ok
1029}
1030
1031func _() int {
1032    {
1033        panic(2)
1034        { // want "unreachable code"
1035        }
1036    }
1037    println() // ok
1038}
1039
1040func _() int {
1041    {
1042        return 2
1043    }
1044    { // want "unreachable code"
1045    }
1046    println() // ok
1047}
1048
1049func _() int {
1050L:
1051    {
1052        goto L
1053    }
1054    { // want "unreachable code"
1055    }
1056    println() // ok
1057}
1058
1059func _() int {
1060    {
1061        panic(2)
1062    }
1063    { // want "unreachable code"
1064    }
1065    println() // ok
1066}
1067
1068// again, with func literals
1069
1070var _ = func() int {
1071}
1072
1073var _ = func() int {
1074    print(1)
1075}
1076
1077var _ = func() int {
1078    print(1)
1079    return 2
1080    println() // want "unreachable code"
1081}
1082
1083var _ = func() int {
1084L:
1085    print(1)
1086    goto L
1087    println() // want "unreachable code"
1088}
1089
1090var _ = func() int {
1091    print(1)
1092    panic(2)
1093    println() // want "unreachable code"
1094}
1095
1096// but only builtin panic
1097var _ = func() int {
1098    var panic = func(int) {}
1099    print(1)
1100    panic(2)
1101    println() // ok
1102}
1103
1104var _ = func() int {
1105    {
1106        print(1)
1107        return 2
1108        println() // want "unreachable code"
1109    }
1110    println() // ok
1111}
1112
1113var _ = func() int {
1114    {
1115        print(1)
1116        return 2
1117    }
1118    println() // want "unreachable code"
1119}
1120
1121var _ = func() int {
1122L:
1123    {
1124        print(1)
1125        goto L
1126        println() // want "unreachable code"
1127    }
1128    println() // ok
1129}
1130
1131var _ = func() int {
1132L:
1133    {
1134        print(1)
1135        goto L
1136    }
1137    println() // want "unreachable code"
1138}
1139
1140var _ = func() int {
1141    print(1)
1142    {
1143        panic(2)
1144    }
1145}
1146
1147var _ = func() int {
1148    print(1)
1149    {
1150        panic(2)
1151        println() // want "unreachable code"
1152    }
1153}
1154
1155var _ = func() int {
1156    print(1)
1157    {
1158        panic(2)
1159    }
1160    println() // want "unreachable code"
1161}
1162
1163var _ = func() int {
1164    print(1)
1165    return 2
1166    { // want "unreachable code"
1167    }
1168}
1169
1170var _ = func() int {
1171L:
1172    print(1)
1173    goto L
1174    { // want "unreachable code"
1175    }
1176}
1177
1178var _ = func() int {
1179    print(1)
1180    panic(2)
1181    { // want "unreachable code"
1182    }
1183}
1184
1185var _ = func() int {
1186    {
1187        print(1)
1188        return 2
1189        { // want "unreachable code"
1190        }
1191    }
1192}
1193
1194var _ = func() int {
1195L:
1196    {
1197        print(1)
1198        goto L
1199        { // want "unreachable code"
1200        }
1201    }
1202}
1203
1204var _ = func() int {
1205    print(1)
1206    {
1207        panic(2)
1208        { // want "unreachable code"
1209        }
1210    }
1211}
1212
1213var _ = func() int {
1214    {
1215        print(1)
1216        return 2
1217    }
1218    { // want "unreachable code"
1219    }
1220}
1221
1222var _ = func() int {
1223L:
1224    {
1225        print(1)
1226        goto L
1227    }
1228    { // want "unreachable code"
1229    }
1230}
1231
1232var _ = func() int {
1233    print(1)
1234    {
1235        panic(2)
1236    }
1237    { // want "unreachable code"
1238    }
1239}
1240
1241var _ = 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
1251var _ = func() int {
1252L:
1253    print(1)
1254    if x == nil {
1255        panic(2)
1256    } else {
1257        goto L
1258    }
1259    println() // want "unreachable code"
1260}
1261
1262var _ = func() int {
1263L:
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
1280var _ = 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
1290var _ = func() int {
1291    print(1)
1292    if x == nil {
1293        panic(2)
1294    }
1295    println() // ok
1296}
1297
1298var _ = func() int {
1299L:
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
1311var _ = func() int {
1312    print(1)
1313    for {
1314    }
1315    println() // want "unreachable code"
1316}
1317
1318var _ = func() int {
1319    for {
1320        for {
1321            break
1322        }
1323    }
1324    println() // want "unreachable code"
1325}
1326
1327var _ = func() int {
1328    for {
1329        for {
1330            break
1331            println() // want "unreachable code"
1332        }
1333    }
1334}
1335
1336var _ = func() int {
1337    for {
1338        for {
1339            continue
1340            println() // want "unreachable code"
1341        }
1342    }
1343}
1344
1345var _ = func() int {
1346    for {
1347    L:
1348        for {
1349            break L
1350        }
1351    }
1352    println() // want "unreachable code"
1353}
1354
1355var _ = func() int {
1356    print(1)
1357    for {
1358        break
1359    }
1360    println() // ok
1361}
1362
1363var _ = func() int {
1364    for {
1365        for {
1366        }
1367        break // want "unreachable code"
1368    }
1369    println() // ok
1370}
1371
1372var _ = func() int {
1373L:
1374    for {
1375        for {
1376            break L
1377        }
1378    }
1379    println() // ok
1380}
1381
1382var _ = func() int {
1383    print(1)
1384    for x == nil {
1385    }
1386    println() // ok
1387}
1388
1389var _ = func() int {
1390    for x == nil {
1391        for {
1392            break
1393        }
1394    }
1395    println() // ok
1396}
1397
1398var _ = func() int {
1399    for x == nil {
1400    L:
1401        for {
1402            break L
1403        }
1404    }
1405    println() // ok
1406}
1407
1408var _ = func() int {
1409    print(1)
1410    for true {
1411    }
1412    println() // ok
1413}
1414
1415var _ = func() int {
1416    for true {
1417        for {
1418            break
1419        }
1420    }
1421    println() // ok
1422}
1423
1424var _ = func() int {
1425    for true {
1426    L:
1427        for {
1428            break L
1429        }
1430    }
1431    println() // ok
1432}
1433
1434var _ = func() int {
1435    print(1)
1436    select {}
1437    println() // want "unreachable code"
1438}
1439
1440var _ = func() int {
1441    print(1)
1442    select {
1443    case <-c:
1444        print(2)
1445        panic("abc")
1446        println() // want "unreachable code"
1447    }
1448}
1449
1450var _ = func() int {
1451    print(1)
1452    select {
1453    case <-c:
1454        print(2)
1455        panic("abc")
1456    }
1457    println() // want "unreachable code"
1458}
1459
1460var _ = func() int {
1461    print(1)
1462    select {
1463    case <-c:
1464        print(2)
1465        for {
1466        }
1467        println() // want "unreachable code"
1468    }
1469}
1470
1471var _ = func() int {
1472    print(1)
1473    select {
1474    case <-c:
1475        print(2)
1476        for {
1477        }
1478    }
1479    println() // want "unreachable code"
1480}
1481
1482var _ = func() int {
1483L:
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
1497var _ = func() int {
1498L:
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
1511var _ = 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
1524var _ = 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
1536var _ = func() int {
1537    print(1)
1538    select {
1539    case <-c:
1540        print(2)
1541    }
1542    println() // ok
1543}
1544
1545var _ = func() int {
1546L:
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
1559var _ = 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
1571var _ = func() int {
1572    print(1)
1573    select {
1574    default:
1575        break
1576    }
1577    println() // ok
1578}
1579
1580var _ = 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
1591var _ = func() int {
1592    print(1)
1593L:
1594    select {
1595    case <-c:
1596        print(2)
1597        for {
1598            break L
1599        }
1600    }
1601    println() // ok
1602}
1603
1604var _ = func() int {
1605    print(1)
1606L:
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
1618var _ = 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
1631var _ = 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
1644var _ = 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
1656var _ = 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
1669var _ = 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
1681var _ = 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
1693var _ = 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
1705var _ = func() int {
1706    print(1)
1707    switch {
1708    }
1709    println() // ok
1710}
1711
1712var _ = 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
1724var _ = 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
1736var _ = 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
1748var _ = func() int {
1749    print(1)
1750    switch x {
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        panic(3)
1765        break L // want "unreachable code"
1766    default:
1767        return 4
1768    }
1769    println() // ok
1770}
1771
1772var _ = 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
1785var _ = func() int {
1786    print(1)
1787L:
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
1800var _ = 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
1813var _ = 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
1825var _ = 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
1838var _ = 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
1850var _ = 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
1862var _ = 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
1874var _ = func() int {
1875    print(1)
1876    switch {
1877    }
1878    println() // ok
1879}
1880
1881var _ = 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
1893var _ = 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
1905var _ = 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
1917var _ = func() int {
1918    print(1)
1919    switch x.(type) {
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        panic(3)
1934        break L // want "unreachable code"
1935    default:
1936        return 4
1937    }
1938    println() // ok
1939}
1940
1941var _ = 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
1954var _ = func() int {
1955    print(1)
1956L:
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
1972var _ = func() int {
1973    println() // ok
1974}
1975
1976var _ = func() int {
1977    return 2
1978    println() // want "unreachable code"
1979}
1980
1981var _ = func() int {
1982L:
1983    goto L
1984    println() // want "unreachable code"
1985}
1986
1987var _ = func() int {
1988    panic(2)
1989    println() // want "unreachable code"
1990}
1991
1992// but only builtin panic
1993var _ = func() int {
1994    var panic = func(int) {}
1995    panic(2)
1996    println() // ok
1997}
1998
1999var _ = func() int {
2000    {
2001        return 2
2002        println() // want "unreachable code"
2003    }
2004}
2005
2006var _ = func() int {
2007    {
2008        return 2
2009    }
2010    println() // want "unreachable code"
2011}
2012
2013var _ = func() int {
2014L:
2015    {
2016        goto L
2017        println() // want "unreachable code"
2018    }
2019}
2020
2021var _ = func() int {
2022L:
2023    {
2024        goto L
2025    }
2026    println() // want "unreachable code"
2027}
2028
2029var _ = func() int {
2030    {
2031        panic(2)
2032        println() // want "unreachable code"
2033    }
2034}
2035
2036var _ = func() int {
2037    {
2038        panic(2)
2039    }
2040    println() // want "unreachable code"
2041}
2042
2043var _ = func() int {
2044    return 2
2045    { // want "unreachable code"
2046    }
2047    println() // ok
2048}
2049
2050var _ = func() int {
2051L:
2052    goto L
2053    { // want "unreachable code"
2054    }
2055    println() // ok
2056}
2057
2058var _ = func() int {
2059    panic(2)
2060    { // want "unreachable code"
2061    }
2062    println() // ok
2063}
2064
2065var _ = func() int {
2066    {
2067        return 2
2068        { // want "unreachable code"
2069        }
2070    }
2071    println() // ok
2072}
2073
2074var _ = func() int {
2075L:
2076    {
2077        goto L
2078        { // want "unreachable code"
2079        }
2080    }
2081    println() // ok
2082}
2083
2084var _ = func() int {
2085    {
2086        panic(2)
2087        { // want "unreachable code"
2088        }
2089    }
2090    println() // ok
2091}
2092
2093var _ = func() int {
2094    {
2095        return 2
2096    }
2097    { // want "unreachable code"
2098    }
2099    println() // ok
2100}
2101
2102var _ = func() int {
2103L:
2104    {
2105        goto L
2106    }
2107    { // want "unreachable code"
2108    }
2109    println() // ok
2110}
2111
2112var _ = func() int {
2113    {
2114        panic(2)
2115    }
2116    { // want "unreachable code"
2117    }
2118    println() // ok
2119}
2120
2121var _ = func() {
2122    // goto without label used to panic
2123    goto
2124}
2125
2126func _() int {
2127    // Empty switch tag with non-bool case value used to panic.
2128    switch {
2129    case 1:
2130        println()
2131    }
2132    println()
2133}
2134
MembersX
T
external
_
Members
X