From 96678f9dc026648889830cd058cd34d9e7759426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Oudompheng?= Date: Wed, 19 Feb 2014 07:55:03 +0100 Subject: [PATCH] cmd/gc: reject incorrect use of fallthrough. Fixes #6500. LGTM=rsc R=golang-codereviews, rsc CC=golang-codereviews https://golang.org/cl/14920053 --- src/cmd/gc/go.y | 2 + src/cmd/gc/swt.c | 2 +- src/cmd/gc/y.tab.c | 506 ++++++++++++++++++------------------ test/fixedbugs/issue6500.go | 29 +++ 4 files changed, 286 insertions(+), 253 deletions(-) create mode 100644 test/fixedbugs/issue6500.go diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index 5432eca852..62ebf5b846 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -557,6 +557,7 @@ caseblock: // This is so that the stmt_list action doesn't look at // the case tokens if the stmt_list is empty. yylast = yychar; + $1->xoffset = block; } stmt_list { @@ -1730,6 +1731,7 @@ non_dcl_stmt: { // will be converted to OFALL $$ = nod(OXFALL, N, N); + $$->xoffset = block; } | LBREAK onew_name { diff --git a/src/cmd/gc/swt.c b/src/cmd/gc/swt.c index d6aa021a9c..ce0190507f 100644 --- a/src/cmd/gc/swt.c +++ b/src/cmd/gc/swt.c @@ -317,7 +317,7 @@ casebody(Node *sw, Node *typeswvar) // botch - shouldn't fall thru declaration last = stat->end->n; - if(last->op == OXFALL) { + if(last->xoffset == n->xoffset && last->op == OXFALL) { if(typeswvar) { setlineno(last); yyerror("cannot fallthrough in type switch"); diff --git a/src/cmd/gc/y.tab.c b/src/cmd/gc/y.tab.c index 390ad80b39..1cadbf49c3 100644 --- a/src/cmd/gc/y.tab.c +++ b/src/cmd/gc/y.tab.c @@ -681,36 +681,36 @@ static const yytype_uint16 yyrline[] = 308, 312, 316, 322, 328, 334, 339, 343, 347, 353, 359, 363, 367, 373, 377, 383, 384, 388, 394, 403, 409, 427, 432, 444, 460, 465, 472, 492, 510, 519, - 538, 537, 552, 551, 582, 585, 592, 591, 602, 608, - 617, 628, 634, 637, 645, 644, 655, 661, 673, 677, - 682, 672, 703, 702, 715, 718, 724, 727, 739, 743, - 738, 761, 760, 776, 777, 781, 785, 789, 793, 797, - 801, 805, 809, 813, 817, 821, 825, 829, 833, 837, - 841, 845, 849, 854, 860, 861, 865, 876, 880, 884, - 888, 893, 897, 907, 911, 916, 924, 928, 929, 940, - 944, 948, 952, 956, 964, 965, 971, 978, 984, 991, - 994, 1001, 1007, 1024, 1031, 1032, 1039, 1040, 1059, 1060, - 1063, 1066, 1070, 1081, 1090, 1096, 1099, 1102, 1109, 1110, - 1116, 1129, 1144, 1152, 1164, 1169, 1175, 1176, 1177, 1178, - 1179, 1180, 1186, 1187, 1188, 1189, 1195, 1196, 1197, 1198, - 1199, 1205, 1206, 1209, 1212, 1213, 1214, 1215, 1216, 1219, - 1220, 1233, 1237, 1242, 1247, 1252, 1256, 1257, 1260, 1266, - 1273, 1279, 1286, 1292, 1303, 1317, 1346, 1386, 1411, 1429, - 1438, 1441, 1449, 1453, 1457, 1464, 1470, 1475, 1487, 1490, - 1500, 1501, 1507, 1508, 1514, 1518, 1524, 1525, 1531, 1535, - 1541, 1564, 1569, 1575, 1581, 1588, 1597, 1606, 1621, 1627, - 1632, 1636, 1643, 1656, 1657, 1663, 1669, 1672, 1676, 1682, - 1685, 1694, 1697, 1698, 1702, 1703, 1709, 1710, 1711, 1712, - 1713, 1715, 1714, 1729, 1734, 1738, 1742, 1746, 1750, 1755, - 1774, 1780, 1788, 1792, 1798, 1802, 1808, 1812, 1818, 1822, - 1831, 1835, 1839, 1843, 1849, 1852, 1860, 1861, 1863, 1864, - 1867, 1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 1894, - 1897, 1900, 1903, 1906, 1912, 1916, 1920, 1924, 1928, 1932, - 1952, 1959, 1970, 1971, 1972, 1975, 1976, 1979, 1983, 1993, - 1997, 2001, 2005, 2009, 2013, 2017, 2023, 2029, 2037, 2045, - 2051, 2058, 2074, 2096, 2100, 2106, 2109, 2112, 2116, 2126, - 2130, 2145, 2153, 2154, 2166, 2167, 2170, 2174, 2180, 2184, - 2190, 2194 + 538, 537, 552, 551, 583, 586, 593, 592, 603, 609, + 618, 629, 635, 638, 646, 645, 656, 662, 674, 678, + 683, 673, 704, 703, 716, 719, 725, 728, 740, 744, + 739, 762, 761, 777, 778, 782, 786, 790, 794, 798, + 802, 806, 810, 814, 818, 822, 826, 830, 834, 838, + 842, 846, 850, 855, 861, 862, 866, 877, 881, 885, + 889, 894, 898, 908, 912, 917, 925, 929, 930, 941, + 945, 949, 953, 957, 965, 966, 972, 979, 985, 992, + 995, 1002, 1008, 1025, 1032, 1033, 1040, 1041, 1060, 1061, + 1064, 1067, 1071, 1082, 1091, 1097, 1100, 1103, 1110, 1111, + 1117, 1130, 1145, 1153, 1165, 1170, 1176, 1177, 1178, 1179, + 1180, 1181, 1187, 1188, 1189, 1190, 1196, 1197, 1198, 1199, + 1200, 1206, 1207, 1210, 1213, 1214, 1215, 1216, 1217, 1220, + 1221, 1234, 1238, 1243, 1248, 1253, 1257, 1258, 1261, 1267, + 1274, 1280, 1287, 1293, 1304, 1318, 1347, 1387, 1412, 1430, + 1439, 1442, 1450, 1454, 1458, 1465, 1471, 1476, 1488, 1491, + 1501, 1502, 1508, 1509, 1515, 1519, 1525, 1526, 1532, 1536, + 1542, 1565, 1570, 1576, 1582, 1589, 1598, 1607, 1622, 1628, + 1633, 1637, 1644, 1657, 1658, 1664, 1670, 1673, 1677, 1683, + 1686, 1695, 1698, 1699, 1703, 1704, 1710, 1711, 1712, 1713, + 1714, 1716, 1715, 1730, 1736, 1740, 1744, 1748, 1752, 1757, + 1776, 1782, 1790, 1794, 1800, 1804, 1810, 1814, 1820, 1824, + 1833, 1837, 1841, 1845, 1851, 1854, 1862, 1863, 1865, 1866, + 1869, 1872, 1875, 1878, 1881, 1884, 1887, 1890, 1893, 1896, + 1899, 1902, 1905, 1908, 1914, 1918, 1922, 1926, 1930, 1934, + 1954, 1961, 1972, 1973, 1974, 1977, 1978, 1981, 1985, 1995, + 1999, 2003, 2007, 2011, 2015, 2019, 2025, 2031, 2039, 2047, + 2053, 2060, 2076, 2098, 2102, 2108, 2111, 2114, 2118, 2128, + 2132, 2147, 2155, 2156, 2168, 2169, 2172, 2176, 2182, 2186, + 2192, 2196 }; #endif @@ -3054,13 +3054,14 @@ yyreduce: // This is so that the stmt_list action doesn't look at // the case tokens if the stmt_list is empty. yylast = yychar; + (yyvsp[(1) - (1)].node)->xoffset = block; } break; case 63: /* Line 1806 of yacc.c */ -#line 562 "go.y" +#line 563 "go.y" { int last; @@ -3084,7 +3085,7 @@ yyreduce: case 64: /* Line 1806 of yacc.c */ -#line 582 "go.y" +#line 583 "go.y" { (yyval.list) = nil; } @@ -3093,7 +3094,7 @@ yyreduce: case 65: /* Line 1806 of yacc.c */ -#line 586 "go.y" +#line 587 "go.y" { (yyval.list) = list((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].node)); } @@ -3102,7 +3103,7 @@ yyreduce: case 66: /* Line 1806 of yacc.c */ -#line 592 "go.y" +#line 593 "go.y" { markdcl(); } @@ -3111,7 +3112,7 @@ yyreduce: case 67: /* Line 1806 of yacc.c */ -#line 596 "go.y" +#line 597 "go.y" { (yyval.list) = (yyvsp[(3) - (4)].list); popdcl(); @@ -3121,7 +3122,7 @@ yyreduce: case 68: /* Line 1806 of yacc.c */ -#line 603 "go.y" +#line 604 "go.y" { (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node)); (yyval.node)->list = (yyvsp[(1) - (4)].list); @@ -3132,7 +3133,7 @@ yyreduce: case 69: /* Line 1806 of yacc.c */ -#line 609 "go.y" +#line 610 "go.y" { (yyval.node) = nod(ORANGE, N, (yyvsp[(4) - (4)].node)); (yyval.node)->list = (yyvsp[(1) - (4)].list); @@ -3144,7 +3145,7 @@ yyreduce: case 70: /* Line 1806 of yacc.c */ -#line 618 "go.y" +#line 619 "go.y" { // init ; test ; incr if((yyvsp[(5) - (5)].node) != N && (yyvsp[(5) - (5)].node)->colas != 0) @@ -3160,7 +3161,7 @@ yyreduce: case 71: /* Line 1806 of yacc.c */ -#line 629 "go.y" +#line 630 "go.y" { // normal test (yyval.node) = nod(OFOR, N, N); @@ -3171,7 +3172,7 @@ yyreduce: case 73: /* Line 1806 of yacc.c */ -#line 638 "go.y" +#line 639 "go.y" { (yyval.node) = (yyvsp[(1) - (2)].node); (yyval.node)->nbody = concat((yyval.node)->nbody, (yyvsp[(2) - (2)].list)); @@ -3181,7 +3182,7 @@ yyreduce: case 74: /* Line 1806 of yacc.c */ -#line 645 "go.y" +#line 646 "go.y" { markdcl(); } @@ -3190,7 +3191,7 @@ yyreduce: case 75: /* Line 1806 of yacc.c */ -#line 649 "go.y" +#line 650 "go.y" { (yyval.node) = (yyvsp[(3) - (3)].node); popdcl(); @@ -3200,7 +3201,7 @@ yyreduce: case 76: /* Line 1806 of yacc.c */ -#line 656 "go.y" +#line 657 "go.y" { // test (yyval.node) = nod(OIF, N, N); @@ -3211,7 +3212,7 @@ yyreduce: case 77: /* Line 1806 of yacc.c */ -#line 662 "go.y" +#line 663 "go.y" { // init ; test (yyval.node) = nod(OIF, N, N); @@ -3224,7 +3225,7 @@ yyreduce: case 78: /* Line 1806 of yacc.c */ -#line 673 "go.y" +#line 674 "go.y" { markdcl(); } @@ -3233,7 +3234,7 @@ yyreduce: case 79: /* Line 1806 of yacc.c */ -#line 677 "go.y" +#line 678 "go.y" { if((yyvsp[(3) - (3)].node)->ntest == N) yyerror("missing condition in if statement"); @@ -3243,7 +3244,7 @@ yyreduce: case 80: /* Line 1806 of yacc.c */ -#line 682 "go.y" +#line 683 "go.y" { (yyvsp[(3) - (5)].node)->nbody = (yyvsp[(5) - (5)].list); } @@ -3252,7 +3253,7 @@ yyreduce: case 81: /* Line 1806 of yacc.c */ -#line 686 "go.y" +#line 687 "go.y" { Node *n; NodeList *nn; @@ -3272,7 +3273,7 @@ yyreduce: case 82: /* Line 1806 of yacc.c */ -#line 703 "go.y" +#line 704 "go.y" { markdcl(); } @@ -3281,7 +3282,7 @@ yyreduce: case 83: /* Line 1806 of yacc.c */ -#line 707 "go.y" +#line 708 "go.y" { if((yyvsp[(4) - (5)].node)->ntest == N) yyerror("missing condition in if statement"); @@ -3293,7 +3294,7 @@ yyreduce: case 84: /* Line 1806 of yacc.c */ -#line 715 "go.y" +#line 716 "go.y" { (yyval.list) = nil; } @@ -3302,7 +3303,7 @@ yyreduce: case 85: /* Line 1806 of yacc.c */ -#line 719 "go.y" +#line 720 "go.y" { (yyval.list) = concat((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); } @@ -3311,7 +3312,7 @@ yyreduce: case 86: /* Line 1806 of yacc.c */ -#line 724 "go.y" +#line 725 "go.y" { (yyval.list) = nil; } @@ -3320,7 +3321,7 @@ yyreduce: case 87: /* Line 1806 of yacc.c */ -#line 728 "go.y" +#line 729 "go.y" { NodeList *node; @@ -3334,7 +3335,7 @@ yyreduce: case 88: /* Line 1806 of yacc.c */ -#line 739 "go.y" +#line 740 "go.y" { markdcl(); } @@ -3343,7 +3344,7 @@ yyreduce: case 89: /* Line 1806 of yacc.c */ -#line 743 "go.y" +#line 744 "go.y" { Node *n; n = (yyvsp[(3) - (3)].node)->ntest; @@ -3356,7 +3357,7 @@ yyreduce: case 90: /* Line 1806 of yacc.c */ -#line 751 "go.y" +#line 752 "go.y" { (yyval.node) = (yyvsp[(3) - (7)].node); (yyval.node)->op = OSWITCH; @@ -3369,7 +3370,7 @@ yyreduce: case 91: /* Line 1806 of yacc.c */ -#line 761 "go.y" +#line 762 "go.y" { typesw = nod(OXXX, typesw, N); } @@ -3378,7 +3379,7 @@ yyreduce: case 92: /* Line 1806 of yacc.c */ -#line 765 "go.y" +#line 766 "go.y" { (yyval.node) = nod(OSELECT, N, N); (yyval.node)->lineno = typesw->lineno; @@ -3390,7 +3391,7 @@ yyreduce: case 94: /* Line 1806 of yacc.c */ -#line 778 "go.y" +#line 779 "go.y" { (yyval.node) = nod(OOROR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3399,7 +3400,7 @@ yyreduce: case 95: /* Line 1806 of yacc.c */ -#line 782 "go.y" +#line 783 "go.y" { (yyval.node) = nod(OANDAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3408,7 +3409,7 @@ yyreduce: case 96: /* Line 1806 of yacc.c */ -#line 786 "go.y" +#line 787 "go.y" { (yyval.node) = nod(OEQ, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3417,7 +3418,7 @@ yyreduce: case 97: /* Line 1806 of yacc.c */ -#line 790 "go.y" +#line 791 "go.y" { (yyval.node) = nod(ONE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3426,7 +3427,7 @@ yyreduce: case 98: /* Line 1806 of yacc.c */ -#line 794 "go.y" +#line 795 "go.y" { (yyval.node) = nod(OLT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3435,7 +3436,7 @@ yyreduce: case 99: /* Line 1806 of yacc.c */ -#line 798 "go.y" +#line 799 "go.y" { (yyval.node) = nod(OLE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3444,7 +3445,7 @@ yyreduce: case 100: /* Line 1806 of yacc.c */ -#line 802 "go.y" +#line 803 "go.y" { (yyval.node) = nod(OGE, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3453,7 +3454,7 @@ yyreduce: case 101: /* Line 1806 of yacc.c */ -#line 806 "go.y" +#line 807 "go.y" { (yyval.node) = nod(OGT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3462,7 +3463,7 @@ yyreduce: case 102: /* Line 1806 of yacc.c */ -#line 810 "go.y" +#line 811 "go.y" { (yyval.node) = nod(OADD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3471,7 +3472,7 @@ yyreduce: case 103: /* Line 1806 of yacc.c */ -#line 814 "go.y" +#line 815 "go.y" { (yyval.node) = nod(OSUB, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3480,7 +3481,7 @@ yyreduce: case 104: /* Line 1806 of yacc.c */ -#line 818 "go.y" +#line 819 "go.y" { (yyval.node) = nod(OOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3489,7 +3490,7 @@ yyreduce: case 105: /* Line 1806 of yacc.c */ -#line 822 "go.y" +#line 823 "go.y" { (yyval.node) = nod(OXOR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3498,7 +3499,7 @@ yyreduce: case 106: /* Line 1806 of yacc.c */ -#line 826 "go.y" +#line 827 "go.y" { (yyval.node) = nod(OMUL, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3507,7 +3508,7 @@ yyreduce: case 107: /* Line 1806 of yacc.c */ -#line 830 "go.y" +#line 831 "go.y" { (yyval.node) = nod(ODIV, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3516,7 +3517,7 @@ yyreduce: case 108: /* Line 1806 of yacc.c */ -#line 834 "go.y" +#line 835 "go.y" { (yyval.node) = nod(OMOD, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3525,7 +3526,7 @@ yyreduce: case 109: /* Line 1806 of yacc.c */ -#line 838 "go.y" +#line 839 "go.y" { (yyval.node) = nod(OAND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3534,7 +3535,7 @@ yyreduce: case 110: /* Line 1806 of yacc.c */ -#line 842 "go.y" +#line 843 "go.y" { (yyval.node) = nod(OANDNOT, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3543,7 +3544,7 @@ yyreduce: case 111: /* Line 1806 of yacc.c */ -#line 846 "go.y" +#line 847 "go.y" { (yyval.node) = nod(OLSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3552,7 +3553,7 @@ yyreduce: case 112: /* Line 1806 of yacc.c */ -#line 850 "go.y" +#line 851 "go.y" { (yyval.node) = nod(ORSH, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3561,7 +3562,7 @@ yyreduce: case 113: /* Line 1806 of yacc.c */ -#line 855 "go.y" +#line 856 "go.y" { (yyval.node) = nod(OSEND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3570,7 +3571,7 @@ yyreduce: case 115: /* Line 1806 of yacc.c */ -#line 862 "go.y" +#line 863 "go.y" { (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); } @@ -3579,7 +3580,7 @@ yyreduce: case 116: /* Line 1806 of yacc.c */ -#line 866 "go.y" +#line 867 "go.y" { if((yyvsp[(2) - (2)].node)->op == OCOMPLIT) { // Special case for &T{...}: turn into (*T){...}. @@ -3595,7 +3596,7 @@ yyreduce: case 117: /* Line 1806 of yacc.c */ -#line 877 "go.y" +#line 878 "go.y" { (yyval.node) = nod(OPLUS, (yyvsp[(2) - (2)].node), N); } @@ -3604,7 +3605,7 @@ yyreduce: case 118: /* Line 1806 of yacc.c */ -#line 881 "go.y" +#line 882 "go.y" { (yyval.node) = nod(OMINUS, (yyvsp[(2) - (2)].node), N); } @@ -3613,7 +3614,7 @@ yyreduce: case 119: /* Line 1806 of yacc.c */ -#line 885 "go.y" +#line 886 "go.y" { (yyval.node) = nod(ONOT, (yyvsp[(2) - (2)].node), N); } @@ -3622,7 +3623,7 @@ yyreduce: case 120: /* Line 1806 of yacc.c */ -#line 889 "go.y" +#line 890 "go.y" { yyerror("the bitwise complement operator is ^"); (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N); @@ -3632,7 +3633,7 @@ yyreduce: case 121: /* Line 1806 of yacc.c */ -#line 894 "go.y" +#line 895 "go.y" { (yyval.node) = nod(OCOM, (yyvsp[(2) - (2)].node), N); } @@ -3641,7 +3642,7 @@ yyreduce: case 122: /* Line 1806 of yacc.c */ -#line 898 "go.y" +#line 899 "go.y" { (yyval.node) = nod(ORECV, (yyvsp[(2) - (2)].node), N); } @@ -3650,7 +3651,7 @@ yyreduce: case 123: /* Line 1806 of yacc.c */ -#line 908 "go.y" +#line 909 "go.y" { (yyval.node) = nod(OCALL, (yyvsp[(1) - (3)].node), N); } @@ -3659,7 +3660,7 @@ yyreduce: case 124: /* Line 1806 of yacc.c */ -#line 912 "go.y" +#line 913 "go.y" { (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N); (yyval.node)->list = (yyvsp[(3) - (5)].list); @@ -3669,7 +3670,7 @@ yyreduce: case 125: /* Line 1806 of yacc.c */ -#line 917 "go.y" +#line 918 "go.y" { (yyval.node) = nod(OCALL, (yyvsp[(1) - (6)].node), N); (yyval.node)->list = (yyvsp[(3) - (6)].list); @@ -3680,7 +3681,7 @@ yyreduce: case 126: /* Line 1806 of yacc.c */ -#line 925 "go.y" +#line 926 "go.y" { (yyval.node) = nodlit((yyvsp[(1) - (1)].val)); } @@ -3689,7 +3690,7 @@ yyreduce: case 128: /* Line 1806 of yacc.c */ -#line 930 "go.y" +#line 931 "go.y" { if((yyvsp[(1) - (3)].node)->op == OPACK) { Sym *s; @@ -3705,7 +3706,7 @@ yyreduce: case 129: /* Line 1806 of yacc.c */ -#line 941 "go.y" +#line 942 "go.y" { (yyval.node) = nod(ODOTTYPE, (yyvsp[(1) - (5)].node), (yyvsp[(4) - (5)].node)); } @@ -3714,7 +3715,7 @@ yyreduce: case 130: /* Line 1806 of yacc.c */ -#line 945 "go.y" +#line 946 "go.y" { (yyval.node) = nod(OTYPESW, N, (yyvsp[(1) - (5)].node)); } @@ -3723,7 +3724,7 @@ yyreduce: case 131: /* Line 1806 of yacc.c */ -#line 949 "go.y" +#line 950 "go.y" { (yyval.node) = nod(OINDEX, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); } @@ -3732,7 +3733,7 @@ yyreduce: case 132: /* Line 1806 of yacc.c */ -#line 953 "go.y" +#line 954 "go.y" { (yyval.node) = nod(OSLICE, (yyvsp[(1) - (6)].node), nod(OKEY, (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node))); } @@ -3741,7 +3742,7 @@ yyreduce: case 133: /* Line 1806 of yacc.c */ -#line 957 "go.y" +#line 958 "go.y" { if((yyvsp[(5) - (8)].node) == N) yyerror("middle index required in 3-index slice"); @@ -3754,7 +3755,7 @@ yyreduce: case 135: /* Line 1806 of yacc.c */ -#line 966 "go.y" +#line 967 "go.y" { // conversion (yyval.node) = nod(OCALL, (yyvsp[(1) - (5)].node), N); @@ -3765,7 +3766,7 @@ yyreduce: case 136: /* Line 1806 of yacc.c */ -#line 972 "go.y" +#line 973 "go.y" { (yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node); @@ -3777,7 +3778,7 @@ yyreduce: case 137: /* Line 1806 of yacc.c */ -#line 979 "go.y" +#line 980 "go.y" { (yyval.node) = (yyvsp[(3) - (5)].node); (yyval.node)->right = (yyvsp[(1) - (5)].node); @@ -3788,7 +3789,7 @@ yyreduce: case 138: /* Line 1806 of yacc.c */ -#line 985 "go.y" +#line 986 "go.y" { yyerror("cannot parenthesize type in composite literal"); (yyval.node) = (yyvsp[(5) - (7)].node); @@ -3800,7 +3801,7 @@ yyreduce: case 140: /* Line 1806 of yacc.c */ -#line 994 "go.y" +#line 995 "go.y" { // composite expression. // make node early so we get the right line number. @@ -3811,7 +3812,7 @@ yyreduce: case 141: /* Line 1806 of yacc.c */ -#line 1002 "go.y" +#line 1003 "go.y" { (yyval.node) = nod(OKEY, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); } @@ -3820,7 +3821,7 @@ yyreduce: case 142: /* Line 1806 of yacc.c */ -#line 1008 "go.y" +#line 1009 "go.y" { // These nodes do not carry line numbers. // Since a composite literal commonly spans several lines, @@ -3842,7 +3843,7 @@ yyreduce: case 143: /* Line 1806 of yacc.c */ -#line 1025 "go.y" +#line 1026 "go.y" { (yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node)->list = (yyvsp[(3) - (4)].list); @@ -3852,7 +3853,7 @@ yyreduce: case 145: /* Line 1806 of yacc.c */ -#line 1033 "go.y" +#line 1034 "go.y" { (yyval.node) = (yyvsp[(2) - (4)].node); (yyval.node)->list = (yyvsp[(3) - (4)].list); @@ -3862,7 +3863,7 @@ yyreduce: case 147: /* Line 1806 of yacc.c */ -#line 1041 "go.y" +#line 1042 "go.y" { (yyval.node) = (yyvsp[(2) - (3)].node); @@ -3884,7 +3885,7 @@ yyreduce: case 151: /* Line 1806 of yacc.c */ -#line 1067 "go.y" +#line 1068 "go.y" { (yyval.i) = LBODY; } @@ -3893,7 +3894,7 @@ yyreduce: case 152: /* Line 1806 of yacc.c */ -#line 1071 "go.y" +#line 1072 "go.y" { (yyval.i) = '{'; } @@ -3902,7 +3903,7 @@ yyreduce: case 153: /* Line 1806 of yacc.c */ -#line 1082 "go.y" +#line 1083 "go.y" { if((yyvsp[(1) - (1)].sym) == S) (yyval.node) = N; @@ -3914,7 +3915,7 @@ yyreduce: case 154: /* Line 1806 of yacc.c */ -#line 1091 "go.y" +#line 1092 "go.y" { (yyval.node) = dclname((yyvsp[(1) - (1)].sym)); } @@ -3923,7 +3924,7 @@ yyreduce: case 155: /* Line 1806 of yacc.c */ -#line 1096 "go.y" +#line 1097 "go.y" { (yyval.node) = N; } @@ -3932,7 +3933,7 @@ yyreduce: case 157: /* Line 1806 of yacc.c */ -#line 1103 "go.y" +#line 1104 "go.y" { (yyval.sym) = (yyvsp[(1) - (1)].sym); // during imports, unqualified non-exported identifiers are from builtinpkg @@ -3944,7 +3945,7 @@ yyreduce: case 159: /* Line 1806 of yacc.c */ -#line 1111 "go.y" +#line 1112 "go.y" { (yyval.sym) = S; } @@ -3953,7 +3954,7 @@ yyreduce: case 160: /* Line 1806 of yacc.c */ -#line 1117 "go.y" +#line 1118 "go.y" { Pkg *p; @@ -3971,7 +3972,7 @@ yyreduce: case 161: /* Line 1806 of yacc.c */ -#line 1130 "go.y" +#line 1131 "go.y" { Pkg *p; @@ -3989,7 +3990,7 @@ yyreduce: case 162: /* Line 1806 of yacc.c */ -#line 1145 "go.y" +#line 1146 "go.y" { (yyval.node) = oldname((yyvsp[(1) - (1)].sym)); if((yyval.node)->pack != N) @@ -4000,7 +4001,7 @@ yyreduce: case 164: /* Line 1806 of yacc.c */ -#line 1165 "go.y" +#line 1166 "go.y" { yyerror("final argument in variadic function missing type"); (yyval.node) = nod(ODDD, typenod(typ(TINTER)), N); @@ -4010,7 +4011,7 @@ yyreduce: case 165: /* Line 1806 of yacc.c */ -#line 1170 "go.y" +#line 1171 "go.y" { (yyval.node) = nod(ODDD, (yyvsp[(2) - (2)].node), N); } @@ -4019,7 +4020,7 @@ yyreduce: case 171: /* Line 1806 of yacc.c */ -#line 1181 "go.y" +#line 1182 "go.y" { (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); } @@ -4028,7 +4029,7 @@ yyreduce: case 175: /* Line 1806 of yacc.c */ -#line 1190 "go.y" +#line 1191 "go.y" { (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); } @@ -4037,7 +4038,7 @@ yyreduce: case 180: /* Line 1806 of yacc.c */ -#line 1200 "go.y" +#line 1201 "go.y" { (yyval.node) = nod(OTPAREN, (yyvsp[(2) - (3)].node), N); } @@ -4046,7 +4047,7 @@ yyreduce: case 190: /* Line 1806 of yacc.c */ -#line 1221 "go.y" +#line 1222 "go.y" { if((yyvsp[(1) - (3)].node)->op == OPACK) { Sym *s; @@ -4062,7 +4063,7 @@ yyreduce: case 191: /* Line 1806 of yacc.c */ -#line 1234 "go.y" +#line 1235 "go.y" { (yyval.node) = nod(OTARRAY, (yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node)); } @@ -4071,7 +4072,7 @@ yyreduce: case 192: /* Line 1806 of yacc.c */ -#line 1238 "go.y" +#line 1239 "go.y" { // array literal of nelem (yyval.node) = nod(OTARRAY, nod(ODDD, N, N), (yyvsp[(4) - (4)].node)); @@ -4081,7 +4082,7 @@ yyreduce: case 193: /* Line 1806 of yacc.c */ -#line 1243 "go.y" +#line 1244 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(2) - (2)].node), N); (yyval.node)->etype = Cboth; @@ -4091,7 +4092,7 @@ yyreduce: case 194: /* Line 1806 of yacc.c */ -#line 1248 "go.y" +#line 1249 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node)->etype = Csend; @@ -4101,7 +4102,7 @@ yyreduce: case 195: /* Line 1806 of yacc.c */ -#line 1253 "go.y" +#line 1254 "go.y" { (yyval.node) = nod(OTMAP, (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); } @@ -4110,7 +4111,7 @@ yyreduce: case 198: /* Line 1806 of yacc.c */ -#line 1261 "go.y" +#line 1262 "go.y" { (yyval.node) = nod(OIND, (yyvsp[(2) - (2)].node), N); } @@ -4119,7 +4120,7 @@ yyreduce: case 199: /* Line 1806 of yacc.c */ -#line 1267 "go.y" +#line 1268 "go.y" { (yyval.node) = nod(OTCHAN, (yyvsp[(3) - (3)].node), N); (yyval.node)->etype = Crecv; @@ -4129,7 +4130,7 @@ yyreduce: case 200: /* Line 1806 of yacc.c */ -#line 1274 "go.y" +#line 1275 "go.y" { (yyval.node) = nod(OTSTRUCT, N, N); (yyval.node)->list = (yyvsp[(3) - (5)].list); @@ -4140,7 +4141,7 @@ yyreduce: case 201: /* Line 1806 of yacc.c */ -#line 1280 "go.y" +#line 1281 "go.y" { (yyval.node) = nod(OTSTRUCT, N, N); fixlbrace((yyvsp[(2) - (3)].i)); @@ -4150,7 +4151,7 @@ yyreduce: case 202: /* Line 1806 of yacc.c */ -#line 1287 "go.y" +#line 1288 "go.y" { (yyval.node) = nod(OTINTER, N, N); (yyval.node)->list = (yyvsp[(3) - (5)].list); @@ -4161,7 +4162,7 @@ yyreduce: case 203: /* Line 1806 of yacc.c */ -#line 1293 "go.y" +#line 1294 "go.y" { (yyval.node) = nod(OTINTER, N, N); fixlbrace((yyvsp[(2) - (3)].i)); @@ -4171,7 +4172,7 @@ yyreduce: case 204: /* Line 1806 of yacc.c */ -#line 1304 "go.y" +#line 1305 "go.y" { (yyval.node) = (yyvsp[(2) - (3)].node); if((yyval.node) == N) @@ -4188,7 +4189,7 @@ yyreduce: case 205: /* Line 1806 of yacc.c */ -#line 1318 "go.y" +#line 1319 "go.y" { Node *t; @@ -4222,7 +4223,7 @@ yyreduce: case 206: /* Line 1806 of yacc.c */ -#line 1347 "go.y" +#line 1348 "go.y" { Node *rcvr, *t; @@ -4265,7 +4266,7 @@ yyreduce: case 207: /* Line 1806 of yacc.c */ -#line 1387 "go.y" +#line 1388 "go.y" { Sym *s; Type *t; @@ -4295,7 +4296,7 @@ yyreduce: case 208: /* Line 1806 of yacc.c */ -#line 1412 "go.y" +#line 1413 "go.y" { (yyval.node) = methodname1(newname((yyvsp[(4) - (8)].sym)), (yyvsp[(2) - (8)].list)->n->right); (yyval.node)->type = functype((yyvsp[(2) - (8)].list)->n, (yyvsp[(6) - (8)].list), (yyvsp[(8) - (8)].list)); @@ -4316,7 +4317,7 @@ yyreduce: case 209: /* Line 1806 of yacc.c */ -#line 1430 "go.y" +#line 1431 "go.y" { (yyvsp[(3) - (5)].list) = checkarglist((yyvsp[(3) - (5)].list), 1); (yyval.node) = nod(OTFUNC, N, N); @@ -4328,7 +4329,7 @@ yyreduce: case 210: /* Line 1806 of yacc.c */ -#line 1438 "go.y" +#line 1439 "go.y" { (yyval.list) = nil; } @@ -4337,7 +4338,7 @@ yyreduce: case 211: /* Line 1806 of yacc.c */ -#line 1442 "go.y" +#line 1443 "go.y" { (yyval.list) = (yyvsp[(2) - (3)].list); if((yyval.list) == nil) @@ -4348,7 +4349,7 @@ yyreduce: case 212: /* Line 1806 of yacc.c */ -#line 1450 "go.y" +#line 1451 "go.y" { (yyval.list) = nil; } @@ -4357,7 +4358,7 @@ yyreduce: case 213: /* Line 1806 of yacc.c */ -#line 1454 "go.y" +#line 1455 "go.y" { (yyval.list) = list1(nod(ODCLFIELD, N, (yyvsp[(1) - (1)].node))); } @@ -4366,7 +4367,7 @@ yyreduce: case 214: /* Line 1806 of yacc.c */ -#line 1458 "go.y" +#line 1459 "go.y" { (yyvsp[(2) - (3)].list) = checkarglist((yyvsp[(2) - (3)].list), 0); (yyval.list) = (yyvsp[(2) - (3)].list); @@ -4376,7 +4377,7 @@ yyreduce: case 215: /* Line 1806 of yacc.c */ -#line 1465 "go.y" +#line 1466 "go.y" { closurehdr((yyvsp[(1) - (1)].node)); } @@ -4385,7 +4386,7 @@ yyreduce: case 216: /* Line 1806 of yacc.c */ -#line 1471 "go.y" +#line 1472 "go.y" { (yyval.node) = closurebody((yyvsp[(3) - (4)].list)); fixlbrace((yyvsp[(2) - (4)].i)); @@ -4395,7 +4396,7 @@ yyreduce: case 217: /* Line 1806 of yacc.c */ -#line 1476 "go.y" +#line 1477 "go.y" { (yyval.node) = closurebody(nil); } @@ -4404,7 +4405,7 @@ yyreduce: case 218: /* Line 1806 of yacc.c */ -#line 1487 "go.y" +#line 1488 "go.y" { (yyval.list) = nil; } @@ -4413,7 +4414,7 @@ yyreduce: case 219: /* Line 1806 of yacc.c */ -#line 1491 "go.y" +#line 1492 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); if(nsyntaxerrors == 0) @@ -4426,7 +4427,7 @@ yyreduce: case 221: /* Line 1806 of yacc.c */ -#line 1502 "go.y" +#line 1503 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } @@ -4435,7 +4436,7 @@ yyreduce: case 223: /* Line 1806 of yacc.c */ -#line 1509 "go.y" +#line 1510 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } @@ -4444,7 +4445,7 @@ yyreduce: case 224: /* Line 1806 of yacc.c */ -#line 1515 "go.y" +#line 1516 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4453,7 +4454,7 @@ yyreduce: case 225: /* Line 1806 of yacc.c */ -#line 1519 "go.y" +#line 1520 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4462,7 +4463,7 @@ yyreduce: case 227: /* Line 1806 of yacc.c */ -#line 1526 "go.y" +#line 1527 "go.y" { (yyval.list) = concat((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].list)); } @@ -4471,7 +4472,7 @@ yyreduce: case 228: /* Line 1806 of yacc.c */ -#line 1532 "go.y" +#line 1533 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4480,7 +4481,7 @@ yyreduce: case 229: /* Line 1806 of yacc.c */ -#line 1536 "go.y" +#line 1537 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4489,7 +4490,7 @@ yyreduce: case 230: /* Line 1806 of yacc.c */ -#line 1542 "go.y" +#line 1543 "go.y" { NodeList *l; @@ -4517,7 +4518,7 @@ yyreduce: case 231: /* Line 1806 of yacc.c */ -#line 1565 "go.y" +#line 1566 "go.y" { (yyvsp[(1) - (2)].node)->val = (yyvsp[(2) - (2)].val); (yyval.list) = list1((yyvsp[(1) - (2)].node)); @@ -4527,7 +4528,7 @@ yyreduce: case 232: /* Line 1806 of yacc.c */ -#line 1570 "go.y" +#line 1571 "go.y" { (yyvsp[(2) - (4)].node)->val = (yyvsp[(4) - (4)].val); (yyval.list) = list1((yyvsp[(2) - (4)].node)); @@ -4538,7 +4539,7 @@ yyreduce: case 233: /* Line 1806 of yacc.c */ -#line 1576 "go.y" +#line 1577 "go.y" { (yyvsp[(2) - (3)].node)->right = nod(OIND, (yyvsp[(2) - (3)].node)->right, N); (yyvsp[(2) - (3)].node)->val = (yyvsp[(3) - (3)].val); @@ -4549,7 +4550,7 @@ yyreduce: case 234: /* Line 1806 of yacc.c */ -#line 1582 "go.y" +#line 1583 "go.y" { (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); @@ -4561,7 +4562,7 @@ yyreduce: case 235: /* Line 1806 of yacc.c */ -#line 1589 "go.y" +#line 1590 "go.y" { (yyvsp[(3) - (5)].node)->right = nod(OIND, (yyvsp[(3) - (5)].node)->right, N); (yyvsp[(3) - (5)].node)->val = (yyvsp[(5) - (5)].val); @@ -4573,7 +4574,7 @@ yyreduce: case 236: /* Line 1806 of yacc.c */ -#line 1598 "go.y" +#line 1599 "go.y" { Node *n; @@ -4587,7 +4588,7 @@ yyreduce: case 237: /* Line 1806 of yacc.c */ -#line 1607 "go.y" +#line 1608 "go.y" { Pkg *pkg; @@ -4605,7 +4606,7 @@ yyreduce: case 238: /* Line 1806 of yacc.c */ -#line 1622 "go.y" +#line 1623 "go.y" { (yyval.node) = embedded((yyvsp[(1) - (1)].sym), localpkg); } @@ -4614,7 +4615,7 @@ yyreduce: case 239: /* Line 1806 of yacc.c */ -#line 1628 "go.y" +#line 1629 "go.y" { (yyval.node) = nod(ODCLFIELD, (yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); ifacedcl((yyval.node)); @@ -4624,7 +4625,7 @@ yyreduce: case 240: /* Line 1806 of yacc.c */ -#line 1633 "go.y" +#line 1634 "go.y" { (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(1) - (1)].sym))); } @@ -4633,7 +4634,7 @@ yyreduce: case 241: /* Line 1806 of yacc.c */ -#line 1637 "go.y" +#line 1638 "go.y" { (yyval.node) = nod(ODCLFIELD, N, oldname((yyvsp[(2) - (3)].sym))); yyerror("cannot parenthesize embedded type"); @@ -4643,7 +4644,7 @@ yyreduce: case 242: /* Line 1806 of yacc.c */ -#line 1644 "go.y" +#line 1645 "go.y" { // without func keyword (yyvsp[(2) - (4)].list) = checkarglist((yyvsp[(2) - (4)].list), 1); @@ -4656,7 +4657,7 @@ yyreduce: case 244: /* Line 1806 of yacc.c */ -#line 1658 "go.y" +#line 1659 "go.y" { (yyval.node) = nod(ONONAME, N, N); (yyval.node)->sym = (yyvsp[(1) - (2)].sym); @@ -4667,7 +4668,7 @@ yyreduce: case 245: /* Line 1806 of yacc.c */ -#line 1664 "go.y" +#line 1665 "go.y" { (yyval.node) = nod(ONONAME, N, N); (yyval.node)->sym = (yyvsp[(1) - (2)].sym); @@ -4678,7 +4679,7 @@ yyreduce: case 247: /* Line 1806 of yacc.c */ -#line 1673 "go.y" +#line 1674 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4687,7 +4688,7 @@ yyreduce: case 248: /* Line 1806 of yacc.c */ -#line 1677 "go.y" +#line 1678 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4696,7 +4697,7 @@ yyreduce: case 249: /* Line 1806 of yacc.c */ -#line 1682 "go.y" +#line 1683 "go.y" { (yyval.list) = nil; } @@ -4705,7 +4706,7 @@ yyreduce: case 250: /* Line 1806 of yacc.c */ -#line 1686 "go.y" +#line 1687 "go.y" { (yyval.list) = (yyvsp[(1) - (2)].list); } @@ -4714,7 +4715,7 @@ yyreduce: case 251: /* Line 1806 of yacc.c */ -#line 1694 "go.y" +#line 1695 "go.y" { (yyval.node) = N; } @@ -4723,7 +4724,7 @@ yyreduce: case 253: /* Line 1806 of yacc.c */ -#line 1699 "go.y" +#line 1700 "go.y" { (yyval.node) = liststmt((yyvsp[(1) - (1)].list)); } @@ -4732,7 +4733,7 @@ yyreduce: case 255: /* Line 1806 of yacc.c */ -#line 1704 "go.y" +#line 1705 "go.y" { (yyval.node) = N; } @@ -4741,7 +4742,7 @@ yyreduce: case 261: /* Line 1806 of yacc.c */ -#line 1715 "go.y" +#line 1716 "go.y" { (yyvsp[(1) - (2)].node) = nod(OLABEL, (yyvsp[(1) - (2)].node), N); (yyvsp[(1) - (2)].node)->sym = dclstack; // context, for goto restrictions @@ -4751,7 +4752,7 @@ yyreduce: case 262: /* Line 1806 of yacc.c */ -#line 1720 "go.y" +#line 1721 "go.y" { NodeList *l; @@ -4766,17 +4767,18 @@ yyreduce: case 263: /* Line 1806 of yacc.c */ -#line 1730 "go.y" +#line 1731 "go.y" { // will be converted to OFALL (yyval.node) = nod(OXFALL, N, N); + (yyval.node)->xoffset = block; } break; case 264: /* Line 1806 of yacc.c */ -#line 1735 "go.y" +#line 1737 "go.y" { (yyval.node) = nod(OBREAK, (yyvsp[(2) - (2)].node), N); } @@ -4785,7 +4787,7 @@ yyreduce: case 265: /* Line 1806 of yacc.c */ -#line 1739 "go.y" +#line 1741 "go.y" { (yyval.node) = nod(OCONTINUE, (yyvsp[(2) - (2)].node), N); } @@ -4794,7 +4796,7 @@ yyreduce: case 266: /* Line 1806 of yacc.c */ -#line 1743 "go.y" +#line 1745 "go.y" { (yyval.node) = nod(OPROC, (yyvsp[(2) - (2)].node), N); } @@ -4803,7 +4805,7 @@ yyreduce: case 267: /* Line 1806 of yacc.c */ -#line 1747 "go.y" +#line 1749 "go.y" { (yyval.node) = nod(ODEFER, (yyvsp[(2) - (2)].node), N); } @@ -4812,7 +4814,7 @@ yyreduce: case 268: /* Line 1806 of yacc.c */ -#line 1751 "go.y" +#line 1753 "go.y" { (yyval.node) = nod(OGOTO, (yyvsp[(2) - (2)].node), N); (yyval.node)->sym = dclstack; // context, for goto restrictions @@ -4822,7 +4824,7 @@ yyreduce: case 269: /* Line 1806 of yacc.c */ -#line 1756 "go.y" +#line 1758 "go.y" { (yyval.node) = nod(ORETURN, N, N); (yyval.node)->list = (yyvsp[(2) - (2)].list); @@ -4844,7 +4846,7 @@ yyreduce: case 270: /* Line 1806 of yacc.c */ -#line 1775 "go.y" +#line 1777 "go.y" { (yyval.list) = nil; if((yyvsp[(1) - (1)].node) != N) @@ -4855,7 +4857,7 @@ yyreduce: case 271: /* Line 1806 of yacc.c */ -#line 1781 "go.y" +#line 1783 "go.y" { (yyval.list) = (yyvsp[(1) - (3)].list); if((yyvsp[(3) - (3)].node) != N) @@ -4866,7 +4868,7 @@ yyreduce: case 272: /* Line 1806 of yacc.c */ -#line 1789 "go.y" +#line 1791 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4875,7 +4877,7 @@ yyreduce: case 273: /* Line 1806 of yacc.c */ -#line 1793 "go.y" +#line 1795 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4884,7 +4886,7 @@ yyreduce: case 274: /* Line 1806 of yacc.c */ -#line 1799 "go.y" +#line 1801 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4893,7 +4895,7 @@ yyreduce: case 275: /* Line 1806 of yacc.c */ -#line 1803 "go.y" +#line 1805 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4902,7 +4904,7 @@ yyreduce: case 276: /* Line 1806 of yacc.c */ -#line 1809 "go.y" +#line 1811 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4911,7 +4913,7 @@ yyreduce: case 277: /* Line 1806 of yacc.c */ -#line 1813 "go.y" +#line 1815 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4920,7 +4922,7 @@ yyreduce: case 278: /* Line 1806 of yacc.c */ -#line 1819 "go.y" +#line 1821 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4929,7 +4931,7 @@ yyreduce: case 279: /* Line 1806 of yacc.c */ -#line 1823 "go.y" +#line 1825 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4938,7 +4940,7 @@ yyreduce: case 280: /* Line 1806 of yacc.c */ -#line 1832 "go.y" +#line 1834 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4947,7 +4949,7 @@ yyreduce: case 281: /* Line 1806 of yacc.c */ -#line 1836 "go.y" +#line 1838 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -4956,7 +4958,7 @@ yyreduce: case 282: /* Line 1806 of yacc.c */ -#line 1840 "go.y" +#line 1842 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4965,7 +4967,7 @@ yyreduce: case 283: /* Line 1806 of yacc.c */ -#line 1844 "go.y" +#line 1846 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -4974,7 +4976,7 @@ yyreduce: case 284: /* Line 1806 of yacc.c */ -#line 1849 "go.y" +#line 1851 "go.y" { (yyval.list) = nil; } @@ -4983,7 +4985,7 @@ yyreduce: case 285: /* Line 1806 of yacc.c */ -#line 1853 "go.y" +#line 1855 "go.y" { (yyval.list) = (yyvsp[(1) - (2)].list); } @@ -4992,7 +4994,7 @@ yyreduce: case 290: /* Line 1806 of yacc.c */ -#line 1867 "go.y" +#line 1869 "go.y" { (yyval.node) = N; } @@ -5001,7 +5003,7 @@ yyreduce: case 292: /* Line 1806 of yacc.c */ -#line 1873 "go.y" +#line 1875 "go.y" { (yyval.list) = nil; } @@ -5010,7 +5012,7 @@ yyreduce: case 294: /* Line 1806 of yacc.c */ -#line 1879 "go.y" +#line 1881 "go.y" { (yyval.node) = N; } @@ -5019,7 +5021,7 @@ yyreduce: case 296: /* Line 1806 of yacc.c */ -#line 1885 "go.y" +#line 1887 "go.y" { (yyval.list) = nil; } @@ -5028,7 +5030,7 @@ yyreduce: case 298: /* Line 1806 of yacc.c */ -#line 1891 "go.y" +#line 1893 "go.y" { (yyval.list) = nil; } @@ -5037,7 +5039,7 @@ yyreduce: case 300: /* Line 1806 of yacc.c */ -#line 1897 "go.y" +#line 1899 "go.y" { (yyval.list) = nil; } @@ -5046,7 +5048,7 @@ yyreduce: case 302: /* Line 1806 of yacc.c */ -#line 1903 "go.y" +#line 1905 "go.y" { (yyval.val).ctype = CTxxx; } @@ -5055,7 +5057,7 @@ yyreduce: case 304: /* Line 1806 of yacc.c */ -#line 1913 "go.y" +#line 1915 "go.y" { importimport((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].val).u.sval); } @@ -5064,7 +5066,7 @@ yyreduce: case 305: /* Line 1806 of yacc.c */ -#line 1917 "go.y" +#line 1919 "go.y" { importvar((yyvsp[(2) - (4)].sym), (yyvsp[(3) - (4)].type)); } @@ -5073,7 +5075,7 @@ yyreduce: case 306: /* Line 1806 of yacc.c */ -#line 1921 "go.y" +#line 1923 "go.y" { importconst((yyvsp[(2) - (5)].sym), types[TIDEAL], (yyvsp[(4) - (5)].node)); } @@ -5082,7 +5084,7 @@ yyreduce: case 307: /* Line 1806 of yacc.c */ -#line 1925 "go.y" +#line 1927 "go.y" { importconst((yyvsp[(2) - (6)].sym), (yyvsp[(3) - (6)].type), (yyvsp[(5) - (6)].node)); } @@ -5091,7 +5093,7 @@ yyreduce: case 308: /* Line 1806 of yacc.c */ -#line 1929 "go.y" +#line 1931 "go.y" { importtype((yyvsp[(2) - (4)].type), (yyvsp[(3) - (4)].type)); } @@ -5100,7 +5102,7 @@ yyreduce: case 309: /* Line 1806 of yacc.c */ -#line 1933 "go.y" +#line 1935 "go.y" { if((yyvsp[(2) - (4)].node) == N) { dclcontext = PEXTERN; // since we skip the funcbody below @@ -5123,7 +5125,7 @@ yyreduce: case 310: /* Line 1806 of yacc.c */ -#line 1953 "go.y" +#line 1955 "go.y" { (yyval.sym) = (yyvsp[(1) - (1)].sym); structpkg = (yyval.sym)->pkg; @@ -5133,7 +5135,7 @@ yyreduce: case 311: /* Line 1806 of yacc.c */ -#line 1960 "go.y" +#line 1962 "go.y" { (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); importsym((yyvsp[(1) - (1)].sym), OTYPE); @@ -5143,7 +5145,7 @@ yyreduce: case 317: /* Line 1806 of yacc.c */ -#line 1980 "go.y" +#line 1982 "go.y" { (yyval.type) = pkgtype((yyvsp[(1) - (1)].sym)); } @@ -5152,7 +5154,7 @@ yyreduce: case 318: /* Line 1806 of yacc.c */ -#line 1984 "go.y" +#line 1986 "go.y" { // predefined name like uint8 (yyvsp[(1) - (1)].sym) = pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg); @@ -5167,7 +5169,7 @@ yyreduce: case 319: /* Line 1806 of yacc.c */ -#line 1994 "go.y" +#line 1996 "go.y" { (yyval.type) = aindex(N, (yyvsp[(3) - (3)].type)); } @@ -5176,7 +5178,7 @@ yyreduce: case 320: /* Line 1806 of yacc.c */ -#line 1998 "go.y" +#line 2000 "go.y" { (yyval.type) = aindex(nodlit((yyvsp[(2) - (4)].val)), (yyvsp[(4) - (4)].type)); } @@ -5185,7 +5187,7 @@ yyreduce: case 321: /* Line 1806 of yacc.c */ -#line 2002 "go.y" +#line 2004 "go.y" { (yyval.type) = maptype((yyvsp[(3) - (5)].type), (yyvsp[(5) - (5)].type)); } @@ -5194,7 +5196,7 @@ yyreduce: case 322: /* Line 1806 of yacc.c */ -#line 2006 "go.y" +#line 2008 "go.y" { (yyval.type) = tostruct((yyvsp[(3) - (4)].list)); } @@ -5203,7 +5205,7 @@ yyreduce: case 323: /* Line 1806 of yacc.c */ -#line 2010 "go.y" +#line 2012 "go.y" { (yyval.type) = tointerface((yyvsp[(3) - (4)].list)); } @@ -5212,7 +5214,7 @@ yyreduce: case 324: /* Line 1806 of yacc.c */ -#line 2014 "go.y" +#line 2016 "go.y" { (yyval.type) = ptrto((yyvsp[(2) - (2)].type)); } @@ -5221,7 +5223,7 @@ yyreduce: case 325: /* Line 1806 of yacc.c */ -#line 2018 "go.y" +#line 2020 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(2) - (2)].type); @@ -5232,7 +5234,7 @@ yyreduce: case 326: /* Line 1806 of yacc.c */ -#line 2024 "go.y" +#line 2026 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (4)].type); @@ -5243,7 +5245,7 @@ yyreduce: case 327: /* Line 1806 of yacc.c */ -#line 2030 "go.y" +#line 2032 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (3)].type); @@ -5254,7 +5256,7 @@ yyreduce: case 328: /* Line 1806 of yacc.c */ -#line 2038 "go.y" +#line 2040 "go.y" { (yyval.type) = typ(TCHAN); (yyval.type)->type = (yyvsp[(3) - (3)].type); @@ -5265,7 +5267,7 @@ yyreduce: case 329: /* Line 1806 of yacc.c */ -#line 2046 "go.y" +#line 2048 "go.y" { (yyval.type) = functype(nil, (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)); } @@ -5274,7 +5276,7 @@ yyreduce: case 330: /* Line 1806 of yacc.c */ -#line 2052 "go.y" +#line 2054 "go.y" { (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(2) - (3)].type))); if((yyvsp[(1) - (3)].sym)) @@ -5286,7 +5288,7 @@ yyreduce: case 331: /* Line 1806 of yacc.c */ -#line 2059 "go.y" +#line 2061 "go.y" { Type *t; @@ -5305,7 +5307,7 @@ yyreduce: case 332: /* Line 1806 of yacc.c */ -#line 2075 "go.y" +#line 2077 "go.y" { Sym *s; Pkg *p; @@ -5330,7 +5332,7 @@ yyreduce: case 333: /* Line 1806 of yacc.c */ -#line 2097 "go.y" +#line 2099 "go.y" { (yyval.node) = nod(ODCLFIELD, newname((yyvsp[(1) - (5)].sym)), typenod(functype(fakethis(), (yyvsp[(3) - (5)].list), (yyvsp[(5) - (5)].list)))); } @@ -5339,7 +5341,7 @@ yyreduce: case 334: /* Line 1806 of yacc.c */ -#line 2101 "go.y" +#line 2103 "go.y" { (yyval.node) = nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type))); } @@ -5348,7 +5350,7 @@ yyreduce: case 335: /* Line 1806 of yacc.c */ -#line 2106 "go.y" +#line 2108 "go.y" { (yyval.list) = nil; } @@ -5357,7 +5359,7 @@ yyreduce: case 337: /* Line 1806 of yacc.c */ -#line 2113 "go.y" +#line 2115 "go.y" { (yyval.list) = (yyvsp[(2) - (3)].list); } @@ -5366,7 +5368,7 @@ yyreduce: case 338: /* Line 1806 of yacc.c */ -#line 2117 "go.y" +#line 2119 "go.y" { (yyval.list) = list1(nod(ODCLFIELD, N, typenod((yyvsp[(1) - (1)].type)))); } @@ -5375,7 +5377,7 @@ yyreduce: case 339: /* Line 1806 of yacc.c */ -#line 2127 "go.y" +#line 2129 "go.y" { (yyval.node) = nodlit((yyvsp[(1) - (1)].val)); } @@ -5384,7 +5386,7 @@ yyreduce: case 340: /* Line 1806 of yacc.c */ -#line 2131 "go.y" +#line 2133 "go.y" { (yyval.node) = nodlit((yyvsp[(2) - (2)].val)); switch((yyval.node)->val.ctype){ @@ -5404,7 +5406,7 @@ yyreduce: case 341: /* Line 1806 of yacc.c */ -#line 2146 "go.y" +#line 2148 "go.y" { (yyval.node) = oldname(pkglookup((yyvsp[(1) - (1)].sym)->name, builtinpkg)); if((yyval.node)->op != OLITERAL) @@ -5415,7 +5417,7 @@ yyreduce: case 343: /* Line 1806 of yacc.c */ -#line 2155 "go.y" +#line 2157 "go.y" { if((yyvsp[(2) - (5)].node)->val.ctype == CTRUNE && (yyvsp[(4) - (5)].node)->val.ctype == CTINT) { (yyval.node) = (yyvsp[(2) - (5)].node); @@ -5431,7 +5433,7 @@ yyreduce: case 346: /* Line 1806 of yacc.c */ -#line 2171 "go.y" +#line 2173 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -5440,7 +5442,7 @@ yyreduce: case 347: /* Line 1806 of yacc.c */ -#line 2175 "go.y" +#line 2177 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -5449,7 +5451,7 @@ yyreduce: case 348: /* Line 1806 of yacc.c */ -#line 2181 "go.y" +#line 2183 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -5458,7 +5460,7 @@ yyreduce: case 349: /* Line 1806 of yacc.c */ -#line 2185 "go.y" +#line 2187 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -5467,7 +5469,7 @@ yyreduce: case 350: /* Line 1806 of yacc.c */ -#line 2191 "go.y" +#line 2193 "go.y" { (yyval.list) = list1((yyvsp[(1) - (1)].node)); } @@ -5476,7 +5478,7 @@ yyreduce: case 351: /* Line 1806 of yacc.c */ -#line 2195 "go.y" +#line 2197 "go.y" { (yyval.list) = list((yyvsp[(1) - (3)].list), (yyvsp[(3) - (3)].node)); } @@ -5485,7 +5487,7 @@ yyreduce: /* Line 1806 of yacc.c */ -#line 5490 "y.tab.c" +#line 5492 "y.tab.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5716,7 +5718,7 @@ yyreturn: /* Line 2067 of yacc.c */ -#line 2199 "go.y" +#line 2201 "go.y" static void diff --git a/test/fixedbugs/issue6500.go b/test/fixedbugs/issue6500.go new file mode 100644 index 0000000000..b265f9ae39 --- /dev/null +++ b/test/fixedbugs/issue6500.go @@ -0,0 +1,29 @@ +// errorcheck + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 6500: missing error when fallthrough appears in a block. + +package main + +func main() { + var x int + switch x { + case 0: + { + fallthrough // ERROR "fallthrough" + } + case 1: + { + switch x { + case 2: + fallthrough + case 3: + } + } + fallthrough + default: + } +}