package main
func main() {
var x interface {} = 42;
switch x := x.(type) {
case int:
case foo:
}
}
before:
x.go:7: non-type case in type switch
x.go:7: inappropriate case for a type switch
now:
x.go:7: foo: undefined
R=ken
OCL=31221
CL=31221
// done in casebody()
poptodcl();
if(typeswvar != N && typeswvar->right != N) {
+ int e;
if($2->op == OLITERAL && $2->val.ctype == CTNIL) {
// this version in type switch case nil
$$ = nod(OTYPESW, N, N);
addtotop($$);
break;
}
- yyerror("non-type case in type switch");
+ e = nerrors;
+ gettype($2, N);
+ // maybe gettype found problems that keep
+ // e from being valid even outside a type switch.
+ // only complain if gettype didn't print new errors.
+ if(nerrors == e)
+ yyerror("non-type case in type switch");
+ $$ = nod(OXCASE, N, N);
+ $$->diag = 1;
+ break;
}
$$ = nod(OXCASE, $2, N);
}
if(n->op != OCASE)
fatal("walkcases: not case %O\n", n->op);
- if(n->left != N) {
+ if(n->left != N && !n->diag) {
setlineno(n);
place = call(n->left, place, arg);
}