• acanino's avatar
    cmd/compile: Fix `internal compiler: getinarg: not a func` when returning invalid interface. · acc90c53
    acanino authored
    Internal error arose from calling methodfunc on a invalid interface
    field during the implements check. int obviously isn't a function,
    and errors on getinarg...
    
    for im := iface.Type; im != nil; im = im.Down {
      imtype = methodfunc(im.Type, nil)
      // ...
    }
    
    Fix handles the internal compiler error, but does not throw an
    additional error, i.e. the following code will error on the I
    interface, but type A will pass the implements check since
    'Read(string) string' is implemented and 'int' is skipped
    
    type I interface {
      Read(string) string
      int
    }
    
    type A struct {
    }
    
    func (a *A) Read(s string) string {
      return s
    }
    
    func New() I {
      return new(A)
    }
    
    Fixes #10975
    
    Change-Id: I4b54013afb2814db3f315515f0c742d8631ca500
    Reviewed-on: https://go-review.googlesource.com/13747
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    acc90c53
issue10975.go 425 Bytes