cmd/guru: whicherrs: don't crash on dead code

Change-Id: I5e80613ec27a4edb45516ff1ff3a88d5f9cb3a67
Reviewed-on: https://go-review.googlesource.com/21130
Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
Dominik Honnef 2016-03-25 06:53:37 +01:00 committed by Alan Donovan
parent 824b504fc7
commit 47218d24f2
3 changed files with 12 additions and 0 deletions

View File

@ -21,6 +21,11 @@ func genErr(i int) error {
}
}
func unreachable() {
err := errVar // @whicherrs func-dead "err"
_ = err
}
func main() {
err := genErr(0) // @whicherrs localerrs "err"
_ = err

View File

@ -1,3 +1,6 @@
-------- @whicherrs func-dead --------
Error: pointer analysis did not find expression (dead code?)
-------- @whicherrs localerrs --------
this error may point to these globals:
errVar

View File

@ -14,6 +14,7 @@ import (
"golang.org/x/tools/cmd/guru/serial"
"golang.org/x/tools/go/ast/astutil"
"golang.org/x/tools/go/loader"
"golang.org/x/tools/go/pointer"
"golang.org/x/tools/go/ssa"
"golang.org/x/tools/go/ssa/ssautil"
)
@ -141,6 +142,9 @@ func whicherrs(q *Query) error {
ptares := ptrAnalysis(ptaConfig)
valueptr := ptares.Queries[value]
if valueptr == (pointer.Pointer{}) {
return fmt.Errorf("pointer analysis did not find expression (dead code?)")
}
for g, v := range globals {
ptr, ok := ptares.Queries[v]
if !ok {