From 13772edbbdba1fa9dc904dbf41846d2b06519a18 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 5 Sep 2017 18:49:36 -0700 Subject: [PATCH] cmd/compile: simplify exporting universal 'error' type MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit There shouldn't be any problems setting error's "Orig" (underlying) type to a separate anonymous interface, as this is already how go/types defines it. Change-Id: I44e9c4048ffe362ce329e8306632e38b5ccfecff Reviewed-on: https://go-review.googlesource.com/61790 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Daniel Martí Reviewed-by: Alan Donovan --- src/cmd/compile/internal/gc/bexport.go | 16 +--------------- src/cmd/compile/internal/gc/universe.go | 5 +---- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/cmd/compile/internal/gc/bexport.go b/src/cmd/compile/internal/gc/bexport.go index 3ac8136704..076b8a91e2 100644 --- a/src/cmd/compile/internal/gc/bexport.go +++ b/src/cmd/compile/internal/gc/bexport.go @@ -601,8 +601,6 @@ func isInlineable(n *Node) bool { return false } -var errorInterface *types.Type // lazily initialized - func (p *exporter) typ(t *types.Type) { if t == nil { Fatalf("exporter: nil type") @@ -654,19 +652,7 @@ func (p *exporter) typ(t *types.Type) { p.qualifiedName(tsym) // write underlying type - orig := t.Orig - if orig == types.Errortype { - // The error type is the only predeclared type which has - // a composite underlying type. When we encode that type, - // make sure to encode the underlying interface rather than - // the named type again. See also the comment in universe.go - // regarding the errortype and issue #15920. - if errorInterface == nil { - errorInterface = makeErrorInterface() - } - orig = errorInterface - } - p.typ(orig) + p.typ(t.Orig) // interfaces don't have associated methods if t.Orig.IsInterface() { diff --git a/src/cmd/compile/internal/gc/universe.go b/src/cmd/compile/internal/gc/universe.go index 31a15d272d..ea901db744 100644 --- a/src/cmd/compile/internal/gc/universe.go +++ b/src/cmd/compile/internal/gc/universe.go @@ -385,10 +385,7 @@ func lexinit1() { s := builtinpkg.Lookup("error") types.Errortype = makeErrorInterface() types.Errortype.Sym = s - // TODO: If we can prove that it's safe to set errortype.Orig here - // than we don't need the special errortype/errorInterface case in - // bexport.go. See also issue #15920. - // errortype.Orig = makeErrorInterface() + types.Errortype.Orig = makeErrorInterface() s.Def = asTypesNode(typenod(types.Errortype)) // We create separate byte and rune types for better error messages -- 2.51.0