From: Matthew Dempsky Date: Sun, 20 Mar 2016 00:51:17 +0000 (-0700) Subject: cmd/compile: ignore receiver name when checking duplicate methods X-Git-Tag: go1.7beta1~1210 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3eaa3046295b9a5bdff0428060c5ffd46347651a;p=gostls13.git cmd/compile: ignore receiver name when checking duplicate methods In golang.org/cl/20602, I changed the semantics of Eqtype to stop checking the receiver parameters for type equality, and pushed this responsibility to addmethod (the only Eqtype caller that cared). However, I accidentally made the check stricter by making it start requiring that receiver names were identical. In general, this is a non-problem because the receiver names in export data will always match the original source. But running GO_GCFLAGS=-newexport ./all.bash at one point tries to load both old and new format export data for package sync, which reveals the problem. (See golang.org/issue/14877 for details.) Easy fix: just check the receiver type for type equality in addmethod, instead of the entire receiver parameter list. Fixes #14877. Change-Id: If10b79f66ba58a1b7774622b4fbad1916aba32f1 Reviewed-on: https://go-review.googlesource.com/20906 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go index 6107d88146..45d65b1967 100644 --- a/src/cmd/compile/internal/gc/dcl.go +++ b/src/cmd/compile/internal/gc/dcl.go @@ -1264,7 +1264,7 @@ func addmethod(msym *Sym, t *Type, tpkg *Pkg, local, nointerface bool) { } // Eqtype only checks that incoming and result parameters match, // so explicitly check that the receiver parameters match too. - if !Eqtype(t, f.Type) || !Eqtype(t.Recvs(), f.Type.Recvs()) { + if !Eqtype(t, f.Type) || !Eqtype(t.Recv().Type, f.Type.Recv().Type) { Yyerror("method redeclared: %v.%v\n\t%v\n\t%v", pa, msym, f.Type, t) } return