Commit bebe06a7 authored by Russ Cox's avatar Russ Cox

type switch bug involving function parameter names

R=ken
OCL=34232
CL=34232
parent ad9fabd7
......@@ -1920,8 +1920,12 @@ typehash(Type *at, int addsym, int d)
break;
case TSTRUCT:
for(t=at->type; t!=T; t=t->down)
h += PRIME7 * typehash(t, addsym, d+1);
for(t=at->type; t!=T; t=t->down) {
if(at->funarg) // walk into TFIELD in function argument struct
h += PRIME7 * typehash(t->type, addsym, d+1);
else
h += PRIME7 * typehash(t, addsym, d+1);
}
break;
case TFUNC:
......
......@@ -387,7 +387,7 @@ mkcaselist(Node *sw, int arg)
continue;
setlineno(c1->link->node);
yyerror("duplicate case in switch");
print(" previous case at %L\n",
print("\tprevious case at %L\n",
c1->node->lineno);
}
break;
......@@ -400,7 +400,7 @@ mkcaselist(Node *sw, int arg)
continue;
setlineno(c1->link->node);
yyerror("duplicate case in switch");
print(" previous case at %L\n",
print("\tprevious case at %L\n",
c1->node->lineno);
}
break;
......
// errchk $G $D/$F.go
// Copyright 2009 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.
package main
func main() {
// 6g used to compile these as two different
// hash codes so it missed the duplication
// and worse, compiled the wrong code
// for one of them.
var x interface{};
switch v := x.(type) {
case func(int):
case func(f int): // ERROR "duplicate"
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment