aboutsummaryrefslogtreecommitdiff
path: root/src/go/types/api_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/go/types/api_test.go')
-rw-r--r--src/go/types/api_test.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go
index 98ef6c423f..2b72607d4e 100644
--- a/src/go/types/api_test.go
+++ b/src/go/types/api_test.go
@@ -1973,6 +1973,29 @@ func TestIdenticalUnions(t *testing.T) {
}
}
+func TestIssue61737(t *testing.T) {
+ // This test verifies that it is possible to construct invalid interfaces
+ // containing duplicate methods using the go/types API.
+ //
+ // It must be possible for importers to construct such invalid interfaces.
+ // Previously, this panicked.
+
+ sig1 := NewSignatureType(nil, nil, nil, NewTuple(NewParam(token.NoPos, nil, "", Typ[Int])), nil, false)
+ sig2 := NewSignatureType(nil, nil, nil, NewTuple(NewParam(token.NoPos, nil, "", Typ[String])), nil, false)
+
+ methods := []*Func{
+ NewFunc(token.NoPos, nil, "M", sig1),
+ NewFunc(token.NoPos, nil, "M", sig2),
+ }
+
+ embeddedMethods := []*Func{
+ NewFunc(token.NoPos, nil, "M", sig2),
+ }
+ embedded := NewInterfaceType(embeddedMethods, nil)
+ iface := NewInterfaceType(methods, []Type{embedded})
+ iface.Complete()
+}
+
func TestIssue15305(t *testing.T) {
const src = "package p; func f() int16; var _ = f(undef)"
fset := token.NewFileSet()