mirror of
https://github.com/golang/go
synced 2024-11-19 07:14:45 -07:00
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 <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
ec7c494535
commit
3eaa304629
@ -1264,7 +1264,7 @@ func addmethod(msym *Sym, t *Type, tpkg *Pkg, local, nointerface bool) {
|
|||||||
}
|
}
|
||||||
// Eqtype only checks that incoming and result parameters match,
|
// Eqtype only checks that incoming and result parameters match,
|
||||||
// so explicitly check that the receiver parameters match too.
|
// 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)
|
Yyerror("method redeclared: %v.%v\n\t%v\n\t%v", pa, msym, f.Type, t)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user