From: Rémy Oudompheng Date: Fri, 21 Sep 2012 19:54:05 +0000 (+1000) Subject: [release-branch.go1] cmd/gc: avoid an internal error on invalid type switch. X-Git-Tag: go1.0.3~157 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=705534bd309c8db6b2f616ee29b83dc5483ed4df;p=gostls13.git [release-branch.go1] cmd/gc: avoid an internal error on invalid type switch. ««« backport 254232c99b3e cmd/gc: avoid an internal error on invalid type switch. The error was caused by a call to implements() even when the type switch variable was not an interface. Fixes #3786. R=golang-dev, r CC=golang-dev, remy https://golang.org/cl/6354102 »»» --- diff --git a/src/cmd/gc/swt.c b/src/cmd/gc/swt.c index f1a95587fd..4079b67da2 100644 --- a/src/cmd/gc/swt.c +++ b/src/cmd/gc/swt.c @@ -889,7 +889,7 @@ typecheckswitch(Node *n) yyerror("%lN is not a type", ll->n); // reset to original type ll->n = n->ntest->right; - } else if(ll->n->type->etype != TINTER && !implements(ll->n->type, t, &missing, &have, &ptr)) { + } else if(ll->n->type->etype != TINTER && t->etype == TINTER && !implements(ll->n->type, t, &missing, &have, &ptr)) { if(have && !missing->broke && !have->broke) yyerror("impossible type switch case: %lN cannot have dynamic type %T" " (wrong type for %S method)\n\thave %S%hT\n\twant %S%hT",