From 47218d24f212e7c2842e86977c1e213d65771ec8 Mon Sep 17 00:00:00 2001 From: Dominik Honnef Date: Fri, 25 Mar 2016 06:53:37 +0100 Subject: [PATCH] cmd/guru: whicherrs: don't crash on dead code Change-Id: I5e80613ec27a4edb45516ff1ff3a88d5f9cb3a67 Reviewed-on: https://go-review.googlesource.com/21130 Reviewed-by: Alan Donovan --- cmd/guru/testdata/src/whicherrs/main.go | 5 +++++ cmd/guru/testdata/src/whicherrs/main.golden | 3 +++ cmd/guru/whicherrs.go | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/cmd/guru/testdata/src/whicherrs/main.go b/cmd/guru/testdata/src/whicherrs/main.go index 27fe6b56..d1613c58 100644 --- a/cmd/guru/testdata/src/whicherrs/main.go +++ b/cmd/guru/testdata/src/whicherrs/main.go @@ -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 diff --git a/cmd/guru/testdata/src/whicherrs/main.golden b/cmd/guru/testdata/src/whicherrs/main.golden index 1118e0a8..3484752c 100644 --- a/cmd/guru/testdata/src/whicherrs/main.golden +++ b/cmd/guru/testdata/src/whicherrs/main.golden @@ -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 diff --git a/cmd/guru/whicherrs.go b/cmd/guru/whicherrs.go index 1baf2a47..ff8c1e51 100644 --- a/cmd/guru/whicherrs.go +++ b/cmd/guru/whicherrs.go @@ -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 {