nickng / dingo-hunter

Static analyser for finding Deadlocks in Go
Apache License 2.0
315 stars 28 forks source link

Error running example #28

Open afonsoalmeida opened 3 years ago

afonsoalmeida commented 3 years ago

Hello, I am having some problems running some the example programs provided, namely the deadlocking-philosophers. When I try to generate a .migo file, it panics:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x7e7651]

goroutine 275 [running]:
github.com/nickng/dingo-hunter/migoextract.(*Const).String(0xc0027af200, 0xc000f80000, 0x70)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/instance.go:93 +0x31
github.com/nickng/dingo-hunter/migoextract.visitFunc(0xc005146f00, 0xc0028bb590, 0xc001977e10)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:28 +0x3fe
github.com/nickng/dingo-hunter/migoextract.(*Function).call(0xc001977860, 0xc008535fc0, 0xc005146f00, 0x0, 0x0, 0xc0028bb590, 0xc0059430e0, 0xc002ab7560, 0x2)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/call.go:304 +0xbb
github.com/nickng/dingo-hunter/migoextract.(*Function).callFn(0xc001977860, 0xc008535fc0, 0xc0028bb590, 0xc0059430e0, 0xc002ab7560, 0x60291c00)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/call.go:296 +0x73
github.com/nickng/dingo-hunter/migoextract.(*Function).Call(0xc001977860, 0xc008535f80, 0xc0028bb590, 0xc0059430e0, 0xc002ab7560)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/call.go:62 +0xe5
github.com/nickng/dingo-hunter/migoextract.visitCall(0xc008535f80, 0xc0028bb590, 0xc00115d360)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:268 +0x225
github.com/nickng/dingo-hunter/migoextract.visitInstr(0xce0720, 0xc008535f80, 0xc0028bb590, 0xc00115d360)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:87 +0x7cb
github.com/nickng/dingo-hunter/migoextract.visitBasicBlock(0xc008548370, 0xc0028bb590, 0xc001977860, 0xc0059430e0, 0xc002ab7560)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:76 +0x3f8
github.com/nickng/dingo-hunter/migoextract.visitIf(0xc00853efe0, 0xc0028bb590, 0xc00160f870)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:608 +0x43b
github.com/nickng/dingo-hunter/migoextract.visitInstr(0xce0f00, 0xc00853efe0, 0xc0028bb590, 0xc00115d870)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:105 +0x6fa
github.com/nickng/dingo-hunter/migoextract.visitBasicBlock(0xc0085482c0, 0xc0028bb590, 0xc001977860, 0xc005942d20, 0xc002ab7560)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:76 +0x3f8
github.com/nickng/dingo-hunter/migoextract.visitJump(0xc0084c3d48, 0xc0028bb590, 0xc00160fc10)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:839 +0x109f
github.com/nickng/dingo-hunter/migoextract.visitInstr(0xce10e0, 0xc0084c3d48, 0xc0028bb590, 0xc00115dc10)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:111 +0x3ee
github.com/nickng/dingo-hunter/migoextract.visitBasicBlock(0xc008548210, 0xc0028bb590, 0xc001977860, 0xc0059426e0, 0xc002ab7560)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:76 +0x3f8
github.com/nickng/dingo-hunter/migoextract.visitFunc(0xc005147680, 0xc0028bb590, 0xc001977860)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/visit.go:38 +0x596
github.com/nickng/dingo-hunter/migoextract.(*TypeInfer).Run(0xc0028bb590)
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/migoextract/migoextract.go:78 +0x990
created by github.com/nickng/dingo-hunter/cmd.extractMigo
    /home/afonso/go_projects/src/github.com/nickng/dingo-hunter/cmd/migo.go:83 +0x538

Any idea as to why this may be happening? Thanks!

nickng commented 3 years ago

Yes, this might happen if a struct is nil.

afonsoalmeida commented 3 years ago

I'm running your examples in examples/deadlocking-philosophers and examples/dining-philosophers, but as far as I can see, neither has a struct evaluating to nil and it still does not work.