summaryrefslogtreecommitdiff
path: root/libgo/go/runtime/defer_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/runtime/defer_test.go')
-rw-r--r--libgo/go/runtime/defer_test.go27
1 files changed, 18 insertions, 9 deletions
diff --git a/libgo/go/runtime/defer_test.go b/libgo/go/runtime/defer_test.go
index 11436a1f08b..5ac08145646 100644
--- a/libgo/go/runtime/defer_test.go
+++ b/libgo/go/runtime/defer_test.go
@@ -6,7 +6,6 @@ package runtime_test
import (
"fmt"
- "os"
"reflect"
"runtime"
"testing"
@@ -325,11 +324,13 @@ func recurseFnPanicRec(level int, maxlevel int) {
recurseFn(level, maxlevel)
}
+var saveInt uint32
+
func recurseFn(level int, maxlevel int) {
a := [40]uint32{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}
if level+1 < maxlevel {
- // Need this print statement to keep a around. '_ = a[4]' doesn't do it.
- fmt.Fprintln(os.Stderr, "recurseFn", level, a[4])
+ // Make sure a array is referenced, so it is not optimized away
+ saveInt = a[4]
recurseFn(level+1, maxlevel)
} else {
panic("recurseFn panic")
@@ -350,12 +351,12 @@ func TestIssue37688(t *testing.T) {
type foo struct {
}
+//go:noinline
func (f *foo) method1() {
- fmt.Fprintln(os.Stderr, "method1")
}
+//go:noinline
func (f *foo) method2() {
- fmt.Fprintln(os.Stderr, "method2")
}
func g2() {
@@ -379,6 +380,10 @@ func g3() {
g2()
}
+var globstruct struct {
+ a, b, c, d, e, f, g, h, i int
+}
+
func ff1(ap *foo, a, b, c, d, e, f, g, h, i int) {
defer ap.method1()
@@ -387,9 +392,15 @@ func ff1(ap *foo, a, b, c, d, e, f, g, h, i int) {
// defer pool)
defer func(ap *foo, a, b, c, d, e, f, g, h, i int) {
if v := recover(); v != nil {
- fmt.Fprintln(os.Stderr, "did recover")
}
- fmt.Fprintln(os.Stderr, "debug", ap, a, b, c, d, e, f, g, h)
+ globstruct.a = a
+ globstruct.b = b
+ globstruct.c = c
+ globstruct.d = d
+ globstruct.e = e
+ globstruct.f = f
+ globstruct.g = g
+ globstruct.h = h
}(ap, a, b, c, d, e, f, g, h, i)
panic("ff1 panic")
}
@@ -397,7 +408,5 @@ func ff1(ap *foo, a, b, c, d, e, f, g, h, i int) {
func rec1(max int) {
if max > 0 {
rec1(max - 1)
- } else {
- fmt.Fprintln(os.Stderr, "finished recursion", max)
}
}