From c8f4d650c829d8c2ce6d599b12d67c8caa98190e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 23 Oct 2013 13:45:49 -0700 Subject: [PATCH] go.tools/ssa/interp: make typeAssert robust against nil types R=adonovan CC=golang-dev https://golang.org/cl/16180043 --- ssa/interp/ops.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ssa/interp/ops.go b/ssa/interp/ops.go index b1eed033..50bfd33f 100644 --- a/ssa/interp/ops.go +++ b/ssa/interp/ops.go @@ -881,13 +881,12 @@ func unop(instr *ssa.UnOp, x value) value { func typeAssert(i *interpreter, instr *ssa.TypeAssert, itf iface) value { var v value err := "" - if idst, ok := instr.AssertedType.Underlying().(*types.Interface); ok { - if itf.t == nil { - err = fmt.Sprintf("interface conversion: interface is nil, not %s", instr.AssertedType) - } else { - v = itf - err = checkInterface(i, idst, itf) - } + if itf.t == nil { + err = fmt.Sprintf("interface conversion: interface is nil, not %s", instr.AssertedType) + + } else if idst, ok := instr.AssertedType.Underlying().(*types.Interface); ok { + v = itf + err = checkInterface(i, idst, itf) } else if types.IsIdentical(itf.t, instr.AssertedType) { v = copyVal(itf.v) // extract value