From 03c8c566829d4bdc7a1c2053124643e32a6d2365 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 30 Oct 2017 12:16:30 -0700 Subject: [PATCH] cmd/compile: skip compiling wrappers for imported defined types When compiling a package that defines a type T with method T.M, we already compile and emit the wrapper method (*T).M. There's no need for every package that uses T to do the same. Change-Id: I3ca2659029907570f8b98d66111686435fad7ed0 Reviewed-on: https://go-review.googlesource.com/74412 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: David Crawshaw --- src/cmd/compile/internal/gc/subr.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cmd/compile/internal/gc/subr.go b/src/cmd/compile/internal/gc/subr.go index 686a8177c5..a3d8df8ffc 100644 --- a/src/cmd/compile/internal/gc/subr.go +++ b/src/cmd/compile/internal/gc/subr.go @@ -1659,6 +1659,12 @@ func genwrapper(rcvr *types.Type, method *types.Field, newnam *types.Sym, iface fmt.Printf("genwrapper rcvrtype=%v method=%v newnam=%v\n", rcvr, method, newnam) } + // Only generate (*T).M wrappers for T.M in T's own package. + if rcvr.IsPtr() && rcvr.Elem() == method.Type.Recv().Type && + rcvr.Elem().Sym != nil && rcvr.Elem().Sym.Pkg != localpkg { + return + } + lineno = autogeneratedPos dclcontext = PEXTERN -- 2.48.1