From fd5f29369093c99fec0493be8bae98f515ff8cf9 Mon Sep 17 00:00:00 2001 From: Peter Weinbergr Date: Fri, 27 Nov 2020 07:51:10 -0500 Subject: [PATCH] go/analysis: avoid panic in ifaceassert Presently ifaceassert.go panics if given asserts whose types reduce to []interface{}.(string) which is illegal Go. Its tests won't even run on such code, but gopls will happily invoke it. This CL adds a test for nil. See golang/go#42857 Change-Id: I2791f4bd0b58559e65e6590822ac8f4123989273 Reviewed-on: https://go-review.googlesource.com/c/tools/+/273766 Reviewed-by: Michael Matloob Trust: Peter Weinberger --- go/analysis/passes/ifaceassert/ifaceassert.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/analysis/passes/ifaceassert/ifaceassert.go b/go/analysis/passes/ifaceassert/ifaceassert.go index c5a71a7c57..fd2285332c 100644 --- a/go/analysis/passes/ifaceassert/ifaceassert.go +++ b/go/analysis/passes/ifaceassert/ifaceassert.go @@ -41,6 +41,10 @@ var Analyzer = &analysis.Analyzer{ // assertableTo checks whether interface v can be asserted into t. It returns // nil on success, or the first conflicting method on failure. func assertableTo(v, t types.Type) *types.Func { + if t == nil || v == nil { + // not assertable to, but there is no missing method + return nil + } // ensure that v and t are interfaces V, _ := v.Underlying().(*types.Interface) T, _ := t.Underlying().(*types.Interface)