From 3eaa3046295b9a5bdff0428060c5ffd46347651a Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sat, 19 Mar 2016 17:51:17 -0700 Subject: [PATCH] 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 --- src/cmd/compile/internal/gc/dcl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- 2.48.1