aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2021-05-30 15:35:06 +0700
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2021-06-08 12:17:50 +0000
commit2169deb35247a80794519589e7cd845c6ebf4e5a (patch)
tree4daa07d18b27333704f35a6ceac0252324f9c2a8 /test
parentc20bcb64882d1134770683d663ee9f82fea715e6 (diff)
downloadgo-2169deb35247a80794519589e7cd845c6ebf4e5a.tar.gz
go-2169deb35247a80794519589e7cd845c6ebf4e5a.zip
cmd/compile: use t.AllMethods when sorting typesByString
For interface types, t.Methods contains only unexpanded method set, i.e exclusive of interface embedding. Thus, we can't use it to detect an interface contains embedding empty interface, like in: type EI interface{} func f() interface{ EI } { return nil } At the time we generate runtime types, we want to check against the full method set of interface instead. Fixes #46386 Change-Id: Idff53ad39276be6632eb5932b76e855c15cbdd2e Reviewed-on: https://go-review.googlesource.com/c/go/+/323649 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'test')
-rw-r--r--test/fixedbugs/issue46386.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/fixedbugs/issue46386.go b/test/fixedbugs/issue46386.go
new file mode 100644
index 00000000000..89dea8abf3b
--- /dev/null
+++ b/test/fixedbugs/issue46386.go
@@ -0,0 +1,32 @@
+// compile -p=main
+
+// Copyright 2021 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.
+
+package main
+
+type I interface {
+ M() interface{}
+}
+
+type S1 struct{}
+
+func (S1) M() interface{} {
+ return nil
+}
+
+type EI interface{}
+
+type S struct{}
+
+func (S) M(as interface{ I }) {}
+
+func f() interface{ EI } {
+ return &S1{}
+}
+
+func main() {
+ var i interface{ I }
+ (&S{}).M(i)
+}