gordonklaus / ineffassign

Detect ineffectual assignments in Go code.
MIT License
398 stars 23 forks source link

maybePanic panics ;) #23

Closed bpicode closed 6 years ago

bpicode commented 6 years ago

Hi, I noticed that ineffassign panics on the following code snippet

package p

import (
    "io"
    "io/ioutil"
)

var w = ioutil.Discard
var MyVar MyType

type MyType struct {}

func (m *MyType) DoWith(w io.Writer) {
    w.Write([]byte("xyz"))
}

func init() {
    MyVar.DoWith(w)
}

Stacktrace

goroutine 1 [running]:
main.(*builder).maybePanic(0xc4200985a0)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:438 +0xe9
main.(*builder).Visit(0xc4200985a0, 0x5983e0, 0xc4200d7ec0, 0x0, 0x597fe0)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:325 +0x29d0
go/ast.Walk(0x5971e0, 0xc4200985a0, 0x5983e0, 0xc4200d7ec0)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:52 +0x66
go/ast.Walk(0x5971e0, 0xc4200985a0, 0x597ca0, 0xc4200cf840)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:102 +0x4a7
go/ast.Walk(0x5971e0, 0xc4200985a0, 0x598620, 0xc4200d7fc0)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:143 +0x15df
main.(*builder).walk(0xc4200985a0, 0x598620, 0xc4200d7fc0)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:122 +0x5a
main.(*builder).Visit(0xc4200985a0, 0x597fe0, 0xc4200cf880, 0x0, 0x0)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:261 +0x163
go/ast.Walk(0x5971e0, 0xc4200985a0, 0x597fe0, 0xc4200cf880)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:52 +0x66
go/ast.walkDeclList(0x5971e0, 0xc4200985a0, 0xc4200cf900, 0x3, 0x4)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:38 +0x81
go/ast.Walk(0x5971e0, 0xc4200985a0, 0x597ea0, 0xc420096d00)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/go/ast/walk.go:353 +0x266f
main.(*builder).walk(0xc4200985a0, 0x597ea0, 0xc420096d00)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:122 +0x5a
main.checkPath(0xc42001bb80, 0x45, 0x50db28, 0x3, 0xc4200cbb01, 0x43bd57, 0x50, 0x4e2c60, 0x1)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:79 +0x12d
main.walkPath.func1(0xc42001bb80, 0x45, 0x599e40, 0xc4200abee0, 0x0, 0x0, 0x0, 0x0)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:61 +0x186
path/filepath.walk(0xc42001bb80, 0x45, 0x599e40, 0xc4200abee0, 0xc42000a0c0, 0x0, 0x0)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/path/filepath/path.go:356 +0x81
path/filepath.walk(0xc42001cd80, 0x37, 0x599e40, 0xc420085520, 0xc42000a0c0, 0x0, 0x0)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/path/filepath/path.go:381 +0x39a
path/filepath.walk(0xc42001c240, 0x33, 0x599e40, 0xc420072750, 0xc42000a0c0, 0x0, 0x20)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/path/filepath/path.go:381 +0x39a
path/filepath.Walk(0xc42001c240, 0x33, 0xc42000a0c0, 0x1, 0xc42001c240)
    /home/travis/.gimme/versions/go1.9.2.linux.amd64/src/path/filepath/path.go:403 +0x11d
main.walkPath(0xc42001c240, 0x33, 0xc42001c240)
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:45 +0x9a
main.main()
    /home/travis/gopath/src/github.com/gordonklaus/ineffassign/ineffassign.go:34 +0x7a

Looks like a bug to me. It was working (no ineff assignments reported) with previous versions, i.e. commit f4847a1d033f24ecb0d8ce8b6ca08b0345cf2ccf and earlier.

Any help is appreciated.

gordonklaus commented 6 years ago

Oh, the irony 😆

Next time I won't forget to run it against more than just the tests.

Thanks for the quick report!