diff options
Diffstat (limited to 'src/go/types/api_test.go')
-rw-r--r-- | src/go/types/api_test.go | 23 |
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() |