mirror of
https://github.com/golang/go
synced 2024-11-11 21:30:23 -07:00
cmd/compile: generate interface method expression wrapper for error.Error
A prior optimization (https://golang.org/cl/106175) removed the generation of unnecessary method expression wrappers, but also eliminated the generation of the wrapper for error.Error which was still required. Special-case error type in the optimization. Fixes #29304. Change-Id: I54c8afc88a2c6d1906afa2d09c68a0a3f3e2f1e3 Reviewed-on: https://go-review.googlesource.com/c/154578 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
fe2feb978e
commit
a1aafd8b28
@ -1517,8 +1517,9 @@ func genwrapper(rcvr *types.Type, method *types.Field, newnam *types.Sym) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only generate I.M wrappers for I in I's own package.
|
// Only generate I.M wrappers for I in I's own package
|
||||||
if rcvr.IsInterface() && rcvr.Sym != nil && rcvr.Sym.Pkg != localpkg {
|
// but keep doing it for error.Error (was issue #29304).
|
||||||
|
if rcvr.IsInterface() && rcvr.Sym != nil && rcvr.Sym.Pkg != localpkg && rcvr != types.Errortype {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
test/fixedbugs/issue29304.go
Normal file
19
test/fixedbugs/issue29304.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// run
|
||||||
|
|
||||||
|
// Copyright 2018 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Verify that relocation target go.builtin.error.Error
|
||||||
|
// is defined and the code links and runs correctly.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
err := errors.New("foo")
|
||||||
|
if error.Error(err) != "foo" {
|
||||||
|
panic("FAILED")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user