Skip to content

Commit

Permalink
interp: fix type check of methods with a receiver of interface kind
Browse files Browse the repository at this point in the history
Fixes #1280.
  • Loading branch information
mvertes authored Oct 8, 2021
1 parent e56db3b commit 5bf4dae
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
30 changes: 30 additions & 0 deletions _test/issue-1280.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package main

import (
"io"
"log"
"os"
)

type DBReader interface {
io.ReadCloser
io.ReaderAt
}

type DB struct {
f DBReader
}

func main() {
f, err := os.Open("/dev/null")
if err != nil {
log.Fatal(err)
}
d := &DB{f}
data := make([]byte, 1)
_, _ = d.f.ReadAt(data, 0)
println("bye")
}

// Output:
// bye
2 changes: 1 addition & 1 deletion interp/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1071,7 +1071,7 @@ func (t *itype) in(i int) *itype {
return t.arg[i]
case valueT:
if t.rtype.Kind() == reflect.Func {
if t.recv != nil {
if t.recv != nil && !isInterface(t.recv) {
i++
}
if t.rtype.IsVariadic() && i == t.rtype.NumIn()-1 {
Expand Down

0 comments on commit 5bf4dae

Please sign in to comment.