diff --git a/go/gcimporter15/bimport.go b/go/gcimporter15/bimport.go index 8bff64c3..3bec19c1 100644 --- a/go/gcimporter15/bimport.go +++ b/go/gcimporter15/bimport.go @@ -493,12 +493,13 @@ func (p *importer) typ(parent *types.Package) types.Type { p.record(nil) } - // no embedded interfaces with gc compiler - if p.int() != 0 { - errorf("unexpected embedded interface") + var embeddeds []*types.Named + for n := p.int(); n > 0; n-- { + p.pos() + embeddeds = append(embeddeds, p.typ(parent).(*types.Named)) } - t := types.NewInterface(p.methodList(parent), nil) + t := types.NewInterface(p.methodList(parent), embeddeds) if p.trackAllTypes { p.typList[n] = t } diff --git a/go/gcimporter15/gcimporter_test.go b/go/gcimporter15/gcimporter_test.go index 3e23c560..e29cb2c6 100644 --- a/go/gcimporter15/gcimporter_test.go +++ b/go/gcimporter15/gcimporter_test.go @@ -249,7 +249,7 @@ var importedObjectTests = []struct { }{ {"math.Pi", "const Pi untyped float"}, {"io.Reader", "type Reader interface{Read(p []byte) (n int, err error)}"}, - {"io.ReadWriter", "type ReadWriter interface{Read(p []byte) (n int, err error); Write(p []byte) (n int, err error)}"}, + {"io.ReadWriter", "type ReadWriter interface{Reader; Writer}"}, {"math.Sin", "func Sin(x float64) float64"}, // TODO(gri) add more tests }