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.
7 // This file produces masses of errors from the type checker due to
8 // missing returns statements and other things.
15 func external() int // ok
27 println() // want "unreachable code"
34 println() // want "unreachable code"
40 println() // want "unreachable code"
43 // but only builtin panic
45 var panic = func(int) {}
55 println() // want "unreachable code"
65 println() // want "unreachable code"
73 println() // want "unreachable code"
84 println() // want "unreachable code"
98 println() // want "unreachable code"
107 println() // want "unreachable code"
113 { // want "unreachable code"
121 { // want "unreachable code"
128 { // want "unreachable code"
136 { // want "unreachable code"
146 { // want "unreachable code"
155 { // want "unreachable code"
165 { // want "unreachable code"
175 { // want "unreachable code"
184 { // want "unreachable code"
195 println() // want "unreachable code"
206 println() // want "unreachable code"
221 println() // want "unreachable code"
224 // if-else chain missing final else is not okay, even if the
225 // conditions cover every possible case.
262 println() // want "unreachable code"
271 println() // want "unreachable code"
278 println() // want "unreachable code"
287 println() // want "unreachable code"
299 println() // want "unreachable code"
314 break // want "unreachable code"
384 println() // want "unreachable code"
393 println() // want "unreachable code"
404 println() // want "unreachable code"
414 println() // want "unreachable code"
426 println() // want "unreachable code"
436 println() // want "unreachable code"
440 println() // want "unreachable code"
455 println() // want "unreachable code"
464 println() // want "unreachable code"
467 println() // want "unreachable code"
480 println() // want "unreachable code"
499 goto L // want "unreachable code"
533 break // want "unreachable code"
573 break // want "unreachable code"
584 println() // want "unreachable code"
587 println() // want "unreachable code"
600 println() // want "unreachable code"
608 println() // want "unreachable code"
612 println() // want "unreachable code"
625 println() // want "unreachable code"
636 println() // want "unreachable code"
649 println() // want "unreachable code"
712 break L // want "unreachable code"
724 break // want "unreachable code"
753 println() // want "unreachable code"
756 println() // want "unreachable code"
769 println() // want "unreachable code"
777 println() // want "unreachable code"
781 println() // want "unreachable code"
794 println() // want "unreachable code"
805 println() // want "unreachable code"
818 println() // want "unreachable code"
881 break L // want "unreachable code"
893 break // want "unreachable code"
916 // again, but without the leading print(1).
917 // testing that everything works when the terminating statement is first.
925 println() // want "unreachable code"
931 println() // want "unreachable code"
936 println() // want "unreachable code"
939 // but only builtin panic
941 var panic = func(int) {}
949 println() // want "unreachable code"
957 println() // want "unreachable code"
964 println() // want "unreachable code"
973 println() // want "unreachable code"
979 println() // want "unreachable code"
987 println() // want "unreachable code"
992 { // want "unreachable code"
1000 { // want "unreachable code"
1007 { // want "unreachable code"
1015 { // want "unreachable code"
1025 { // want "unreachable code"
1034 { // want "unreachable code"
1044 { // want "unreachable code"
1054 { // want "unreachable code"
1063 { // want "unreachable code"
1068 // again, with func literals
1070 var _ = func() int {
1073 var _ = func() int {
1077 var _ = func() int {
1080 println() // want "unreachable code"
1083 var _ = func() int {
1087 println() // want "unreachable code"
1090 var _ = func() int {
1093 println() // want "unreachable code"
1096 // but only builtin panic
1097 var _ = func() int {
1098 var panic = func(int) {}
1104 var _ = func() int {
1108 println() // want "unreachable code"
1113 var _ = func() int {
1118 println() // want "unreachable code"
1121 var _ = func() int {
1126 println() // want "unreachable code"
1131 var _ = func() int {
1137 println() // want "unreachable code"
1140 var _ = func() int {
1147 var _ = func() int {
1151 println() // want "unreachable code"
1155 var _ = func() int {
1160 println() // want "unreachable code"
1163 var _ = func() int {
1166 { // want "unreachable code"
1170 var _ = func() int {
1174 { // want "unreachable code"
1178 var _ = func() int {
1181 { // want "unreachable code"
1185 var _ = func() int {
1189 { // want "unreachable code"
1194 var _ = func() int {
1199 { // want "unreachable code"
1204 var _ = func() int {
1208 { // want "unreachable code"
1213 var _ = func() int {
1218 { // want "unreachable code"
1222 var _ = func() int {
1228 { // want "unreachable code"
1232 var _ = func() int {
1237 { // want "unreachable code"
1241 var _ = func() int {
1248 println() // want "unreachable code"
1251 var _ = func() int {
1259 println() // want "unreachable code"
1262 var _ = func() int {
1274 println() // want "unreachable code"
1277 // if-else chain missing final else is not okay, even if the
1278 // conditions cover every possible case.
1280 var _ = func() int {
1284 } else if x != nil {
1290 var _ = func() int {
1298 var _ = func() int {
1311 var _ = func() int {
1315 println() // want "unreachable code"
1318 var _ = func() int {
1324 println() // want "unreachable code"
1327 var _ = func() int {
1331 println() // want "unreachable code"
1336 var _ = func() int {
1340 println() // want "unreachable code"
1345 var _ = func() int {
1352 println() // want "unreachable code"
1355 var _ = func() int {
1363 var _ = func() int {
1367 break // want "unreachable code"
1372 var _ = func() int {
1382 var _ = func() int {
1389 var _ = func() int {
1398 var _ = func() int {
1408 var _ = func() int {
1415 var _ = func() int {
1424 var _ = func() int {
1434 var _ = func() int {
1437 println() // want "unreachable code"
1440 var _ = func() int {
1446 println() // want "unreachable code"
1450 var _ = func() int {
1457 println() // want "unreachable code"
1460 var _ = func() int {
1467 println() // want "unreachable code"
1471 var _ = func() int {
1479 println() // want "unreachable code"
1482 var _ = func() int {
1489 println() // want "unreachable code"
1493 println() // want "unreachable code"
1497 var _ = func() int {
1508 println() // want "unreachable code"
1511 var _ = func() int {
1517 println() // want "unreachable code"
1520 println() // want "unreachable code"
1524 var _ = func() int {
1533 println() // want "unreachable code"
1536 var _ = func() int {
1545 var _ = func() int {
1552 goto L // want "unreachable code"
1559 var _ = func() int {
1571 var _ = func() int {
1580 var _ = func() int {
1586 break // want "unreachable code"
1591 var _ = func() int {
1604 var _ = func() int {
1618 var _ = func() int {
1626 break // want "unreachable code"
1631 var _ = func() int {
1637 println() // want "unreachable code"
1640 println() // want "unreachable code"
1644 var _ = func() int {
1653 println() // want "unreachable code"
1656 var _ = func() int {
1661 println() // want "unreachable code"
1665 println() // want "unreachable code"
1669 var _ = func() int {
1678 println() // want "unreachable code"
1681 var _ = func() int {
1689 println() // want "unreachable code"
1693 var _ = func() int {
1702 println() // want "unreachable code"
1705 var _ = func() int {
1712 var _ = func() int {
1724 var _ = func() int {
1736 var _ = func() int {
1748 var _ = func() int {
1758 var _ = func() int {
1765 break L // want "unreachable code"
1772 var _ = func() int {
1777 break // want "unreachable code"
1785 var _ = func() int {
1800 var _ = func() int {
1806 println() // want "unreachable code"
1809 println() // want "unreachable code"
1813 var _ = func() int {
1822 println() // want "unreachable code"
1825 var _ = func() int {
1830 println() // want "unreachable code"
1834 println() // want "unreachable code"
1838 var _ = func() int {
1847 println() // want "unreachable code"
1850 var _ = func() int {
1858 println() // want "unreachable code"
1862 var _ = func() int {
1871 println() // want "unreachable code"
1874 var _ = func() int {
1881 var _ = func() int {
1893 var _ = func() int {
1905 var _ = func() int {
1917 var _ = func() int {
1927 var _ = func() int {
1934 break L // want "unreachable code"
1941 var _ = func() int {
1946 break // want "unreachable code"
1954 var _ = func() int {
1969 // again, but without the leading print(1).
1970 // testing that everything works when the terminating statement is first.
1972 var _ = func() int {
1976 var _ = func() int {
1978 println() // want "unreachable code"
1981 var _ = func() int {
1984 println() // want "unreachable code"
1987 var _ = func() int {
1989 println() // want "unreachable code"
1992 // but only builtin panic
1993 var _ = func() int {
1994 var panic = func(int) {}
1999 var _ = func() int {
2002 println() // want "unreachable code"
2006 var _ = func() int {
2010 println() // want "unreachable code"
2013 var _ = func() int {
2017 println() // want "unreachable code"
2021 var _ = func() int {
2026 println() // want "unreachable code"
2029 var _ = func() int {
2032 println() // want "unreachable code"
2036 var _ = func() int {
2040 println() // want "unreachable code"
2043 var _ = func() int {
2045 { // want "unreachable code"
2050 var _ = func() int {
2053 { // want "unreachable code"
2058 var _ = func() int {
2060 { // want "unreachable code"
2065 var _ = func() int {
2068 { // want "unreachable code"
2074 var _ = func() int {
2078 { // want "unreachable code"
2084 var _ = func() int {
2087 { // want "unreachable code"
2093 var _ = func() int {
2097 { // want "unreachable code"
2102 var _ = func() int {
2107 { // want "unreachable code"
2112 var _ = func() int {
2116 { // want "unreachable code"
2122 // goto without label used to panic
2127 // Empty switch tag with non-bool case value used to panic.