runtime: fix TestCallersNilPointerPanic
The expected result of TestCallersNilPointerPanic has changed in
GoLLVM. This CL makes some elements of the expected result optional
so that this test passes in both gccgo and GoLLVM.
Change-Id: I8a909266ead0b99062da075bbf645bade95a1ea5
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/230138
Reviewed-by: Ian Lance Taylor <iant@golang.org>
diff --git a/libgo/go/runtime/callers_test.go b/libgo/go/runtime/callers_test.go
index 26a6f3a..1fc7f86 100644
--- a/libgo/go/runtime/callers_test.go
+++ b/libgo/go/runtime/callers_test.go
@@ -67,7 +67,7 @@
}
}
-func testCallersEqual(t *testing.T, pcs []uintptr, want []string) {
+func testCallersEqual(t *testing.T, pcs []uintptr, want []string, ignore map[string]struct{}) {
got := make([]string, 0, len(want))
frames := runtime.CallersFrames(pcs)
@@ -76,7 +76,9 @@
if !more || len(got) >= len(want) {
break
}
- got = append(got, frame.Function)
+ if _, ok := ignore[frame.Function]; !ok {
+ got = append(got, frame.Function)
+ }
}
if !reflect.DeepEqual(want, got) {
t.Fatalf("wanted %v, got %v", want, got)
@@ -106,7 +108,7 @@
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
testCallers(t, pcs, true)
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
f1(true)
}
@@ -128,7 +130,7 @@
if recover() == nil {
t.Fatal("did not panic")
}
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
if recover() == nil {
t.Fatal("did not panic")
@@ -149,7 +151,7 @@
defer func() {
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
defer func() {
if recover() == nil {
@@ -177,7 +179,7 @@
// recovered, there is no remaining panic on the stack.
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
defer func() {
r := recover()
@@ -208,7 +210,7 @@
defer func() {
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
func() {
defer func() {
@@ -233,10 +235,16 @@
want := []string{"runtime.Callers", "runtime_test.TestCallersNilPointerPanic.func1",
"runtime.gopanic", "runtime.panicmem", "runtime.sigpanic",
"runtime_test.TestCallersNilPointerPanic"}
+ ign := make(map[string]struct{})
if runtime.Compiler == "gccgo" {
+ // The expected results of gollvm and gccgo are slightly different, the result
+ // of gccgo does not contain tRunner, and the result of gollvm does not contain
+ // sigpanic. Make these two elementes optional to pass both of gollvm and gccgo.
want = []string{"runtime.Callers", "runtime_test.TestCallersNilPointerPanic..func1",
- "runtime.gopanic", "runtime.panicmem", "runtime.sigpanic",
+ "runtime.gopanic", "runtime.panicmem",
"runtime_test.TestCallersNilPointerPanic"}
+ ign["runtime.sigpanic"] = struct{}{}
+ ign["testing.tRunner"] = struct{}{}
}
defer func() {
@@ -245,7 +253,7 @@
}
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, ign)
}()
var p *int
if *p == 3 {
@@ -271,7 +279,7 @@
}
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
}()
var n int
if 5/n == 1 {
@@ -298,7 +306,7 @@
}
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
if state == 1 {
t.Fatal("nil defer func panicked at defer time rather than function exit time")
}
@@ -328,7 +336,7 @@
}
pcs := make([]uintptr, 20)
pcs = pcs[:runtime.Callers(0, pcs)]
- testCallersEqual(t, pcs, want)
+ testCallersEqual(t, pcs, want, nil)
if state == 1 {
t.Fatal("nil defer func panicked at defer time rather than function exit time")
}