From 56d88ef89dabf2ead8cd4aa31952d2a7d7dd40b7 Mon Sep 17 00:00:00 2001 From: Nicholas Wiersma Date: Fri, 29 May 2020 13:28:03 +0200 Subject: [PATCH] fix: nil recover case --- _test/recover2.go | 15 +++++++++++++++ interp/run.go | 6 +----- 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 _test/recover2.go diff --git a/_test/recover2.go b/_test/recover2.go new file mode 100644 index 00000000..15ae6aeb --- /dev/null +++ b/_test/recover2.go @@ -0,0 +1,15 @@ +package main + +func main() { + println("hello") + + var r interface{} = 1 + r = recover() + if r == nil { + println("world") + } +} + +// Output: +// hello +// world diff --git a/interp/run.go b/interp/run.go index ffacb4f6..e28ee35d 100644 --- a/interp/run.go +++ b/interp/run.go @@ -459,13 +459,9 @@ func _println(n *node) { func _recover(n *node) { tnext := getExec(n.tnext) dest := genValue(n) - var err error - nilErr := reflect.ValueOf(valueInterface{n, reflect.ValueOf(&err).Elem()}) n.exec = func(f *frame) bltn { - if f.anc.recovered == nil { - dest(f).Set(nilErr) - } else { + if f.anc.recovered != nil { dest(f).Set(reflect.ValueOf(valueInterface{n, reflect.ValueOf(f.anc.recovered)})) f.anc.recovered = nil }