From 8cb74e1d1812caee1705eef94272c959911ee9b3 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Fri, 25 Mar 2016 11:03:47 -0400 Subject: [PATCH] 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/21112 Reviewed-by: Michel Lespinasse Reviewed-by: Ian Lance Taylor Run-TryBot: David Crawshaw TryBot-Result: Gobot Gobot --- src/reflect/all_test.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index bb4592b332..b0a2608afb 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -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'") -- 2.48.1