From: Austin Clements Date: Fri, 11 Aug 2017 14:36:16 +0000 (+0000) Subject: Revert "Revert "cmd/compile: discard duplicate inline method bodies"" X-Git-Tag: go1.10beta1~1619 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c8e9fd5db0a7f30456b738e827521091acb41f95;p=gostls13.git Revert "Revert "cmd/compile: discard duplicate inline method bodies"" This reverts commit f612cd704a260cf362e5b6307b7ace4eb83f5f56. Reason for revert: We thought the original change had broken the linux/amd64 and linux/386 builders, but it turned out to be a problem with the build infrastructure, not the change. Change-Id: Ic3318a63464fcba8d845ac04494115a7ba620364 Reviewed-on: https://go-review.googlesource.com/55050 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 866b9a7525..ba542b4719 100644 --- a/src/cmd/compile/internal/gc/bimport.go +++ b/src/cmd/compile/internal/gc/bimport.go @@ -484,6 +484,7 @@ func (p *importer) typ() *types.Type { t = pkgtype(p.imp, tsym) p.typList = append(p.typList, t) + dup := !t.IsKind(types.TFORW) // type already imported // read underlying type t0 := p.typ() @@ -514,10 +515,19 @@ func (p *importer) typ() *types.Type { result := p.paramList() nointerface := p.bool() + mt := functypefield(recv[0], params, result) + addmethod(sym, mt, false, nointerface) + + if dup { + // An earlier import already declared this type and its methods. + // Discard the duplicate method declaration. + p.funcList = append(p.funcList, nil) + continue + } + n := newfuncname(methodname(sym, recv[0].Type)) - n.Type = functypefield(recv[0], params, result) + n.Type = mt checkwidth(n.Type) - addmethod(sym, n.Type, false, nointerface) p.funcList = append(p.funcList, n) importlist = append(importlist, n)