aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreric fang <eric.fang@arm.com>2020-04-20 08:42:01 +0000
committerIan Lance Taylor <iant@golang.org>2020-05-11 17:36:24 -0700
commit5ca575182338a2670f3e7d636c48a2e2ef2d32dc (patch)
tree1762e727216a89e5f13e95b3b0e6e8f6d96ed750
parent4f157ed7749fd13c3562dd09696f7d675b86434f (diff)
downloadgcc-5ca575182338a2670f3e7d636c48a2e2ef2d32dc.zip
gcc-5ca575182338a2670f3e7d636c48a2e2ef2d32dc.tar.gz
gcc-5ca575182338a2670f3e7d636c48a2e2ef2d32dc.tar.bz2
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. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/230138
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--libgo/go/runtime/callers_test.go32
2 files changed, 21 insertions, 13 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 939ba7c..02f6746 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-8645632618262d1661ece0c9e6fe9e04c6e3a878
+876bdf3df3bb33dbf1414237d84be5da32a48082
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
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 testCallers(t *testing.T, pcs []uintptr, pan bool) {
}
}
-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 @@ func testCallersEqual(t *testing.T, pcs []uintptr, want []string) {
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 @@ func TestCallersPanic(t *testing.T) {
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 @@ func TestCallersDoublePanic(t *testing.T) {
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 @@ func TestCallersAfterRecovery(t *testing.T) {
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 @@ func TestCallersAbortedPanic(t *testing.T) {
// 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 @@ func TestCallersAbortedPanic2(t *testing.T) {
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 @@ func TestCallersNilPointerPanic(t *testing.T) {
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 @@ func TestCallersNilPointerPanic(t *testing.T) {
}
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 @@ func TestCallersDivZeroPanic(t *testing.T) {
}
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 @@ func TestCallersDeferNilFuncPanic(t *testing.T) {
}
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 @@ func TestCallersDeferNilFuncPanicWithLoop(t *testing.T) {
}
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")
}