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