1
0
mirror of https://github.com/golang/go synced 2024-11-25 06:37:58 -07:00

bogus diagnostic with

default as first case
in a switch

SVN=123398
This commit is contained in:
Ken Thompson 2008-06-18 11:43:50 -07:00
parent c242b53d22
commit 1926fef175
2 changed files with 5 additions and 7 deletions

View File

@ -440,7 +440,7 @@ swgen(Node *n)
while(c1 != N) {
dynlineno = c1->lineno; // for diagnostics
if(c1->op != OCASE) {
if(s0 == C)
if(s0 == C && dflt == P)
yyerror("unreachable statements in a switch");
gen(c1);
@ -463,7 +463,6 @@ swgen(Node *n)
dflt = pc;
while(c2 != N) {
s = mal(sizeof(*s));
if(s0 == C)
s0 = s;

View File

@ -116,6 +116,7 @@ loop:
walktype(n->ninit, Etop);
walktype(n->ntest, Erv);
walktype(n->nbody, Etop);
// find common type
if(n->ntest->type == T)
n->ntest->type = walkswitch(n, sw1);
@ -127,11 +128,9 @@ loop:
// set the type on all literals
if(n->ntest->type != T)
walkswitch(n, sw3);
walktype(n->ntest, Erv);
n = n->nincr;
goto loop;
walktype(n->ntest, Erv); // BOTCH is this right
walktype(n->nincr, Erv);
goto ret;
case OEMPTY:
if(top != Etop)