Commit 8cb74e1d authored by David Crawshaw's avatar David Crawshaw

reflect: name interface type that pins method info

I recently added TestUnexportedMethods which uses an interface type
to pin type information for an unexported method. But as written,
the interface type is not accessible to the reflect package.

You can imagine a future compiler optimization realizing that and
removing the type information for f. In fact, cl/20901 happens to
do that.

Change-Id: I1ddb67f50cb9b5737253b58f10545f3de652c29d
Reviewed-on: https://go-review.googlesource.com/21112Reviewed-by: default avatarMichel Lespinasse <walken@google.com>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 6b0688f7
......@@ -2372,12 +2372,14 @@ type unexp struct{}
func (*unexp) f() (int32, int8) { return 7, 7 }
func (*unexp) g() (int64, int8) { return 8, 8 }
func TestUnexportedMethods(t *testing.T) {
_ = (interface {
f() (int32, int8)
})(new(unexp))
type unexpI interface {
f() (int32, int8)
}
typ := TypeOf(new(unexp))
var unexpi unexpI = new(unexp)
func TestUnexportedMethods(t *testing.T) {
typ := TypeOf(unexpi)
if typ.Method(0).Type == nil {
t.Error("missing type for satisfied method 'f'")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment