aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/testdata
diff options
context:
space:
mode:
authorDavid Chase <drchase@google.com>2017-11-30 15:11:34 -0500
committerKeith Randall <khr@golang.org>2017-12-01 07:09:54 +0000
commitf22cf7131a322f958d07c087e8d6a95723262180 (patch)
tree8857bf91b1ec840167926b07836c33a3eca857fa /src/cmd/compile/internal/ssa/testdata
parentd4f48e3ff92d1d9ea05f5d8b91e37a29eba0ac89 (diff)
downloadgo-f22cf7131a322f958d07c087e8d6a95723262180.tar.gz
go-f22cf7131a322f958d07c087e8d6a95723262180.zip
cmd/compile: use src.NoXPos for entry-block constants
The ssa backend is aggressive about placing constants and certain other values in the Entry block. It's implausible that the original line numbers for these constants makes any sort of sense when it appears to a user stepping in a debugger, and they're also not that useful in dumps since entry-block instructions tend to be constants (i.e., unlikely to be the cause of a crash). Therefore, use src.NoXPos for any values that are explicitly inserted into a function's entry block. Passes all tests, including ssa/debug_test.go with both gdb and a fairly recent dlv. Hand-verified that it solves the reported problem; constructed a test that reproduced a problem, and fixed it. Modified test harness to allow injection of slightly more interesting inputs. Fixes #22558. Change-Id: I4476927067846bc4366da7793d2375c111694c55 Reviewed-on: https://go-review.googlesource.com/81215 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/testdata')
-rw-r--r--src/cmd/compile/internal/ssa/testdata/hist.dbg-dlv.nexts7
-rw-r--r--src/cmd/compile/internal/ssa/testdata/hist.dbg-gdb.nexts8
-rw-r--r--src/cmd/compile/internal/ssa/testdata/hist.go9
-rw-r--r--src/cmd/compile/internal/ssa/testdata/hist.opt-dlv.nexts7
-rw-r--r--src/cmd/compile/internal/ssa/testdata/hist.opt-gdb.nexts8
-rw-r--r--src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-dlv.nexts11
-rw-r--r--src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-gdb.nexts11
-rw-r--r--src/cmd/compile/internal/ssa/testdata/i22558.go43
-rw-r--r--src/cmd/compile/internal/ssa/testdata/i22600.dbg-race-gdb.nexts3
-rw-r--r--src/cmd/compile/internal/ssa/testdata/i22600.go6
10 files changed, 94 insertions, 19 deletions
diff --git a/src/cmd/compile/internal/ssa/testdata/hist.dbg-dlv.nexts b/src/cmd/compile/internal/ssa/testdata/hist.dbg-dlv.nexts
index f4fe2af161..ec79b77de2 100644
--- a/src/cmd/compile/internal/ssa/testdata/hist.dbg-dlv.nexts
+++ b/src/cmd/compile/internal/ssa/testdata/hist.dbg-dlv.nexts
@@ -1,12 +1,12 @@
./testdata/hist.go
-55: func main() {
+55: func test() {
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58: tinycall() // this forces l etc to stack
59: dx := l.end.x - l.begin.x //gdb-dbg=(l.begin.x,l.end.y)//gdb-opt=(l,dx/O,dy/O)
60: dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
61: sink = dx + dy //gdb-opt=(dx,dy)
-63: hist := make([]int, 7) //gdb-opt=(sink,dx/O,dy/O)
-64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A)
+63: hist := make([]int, 7) //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
+64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
65: if len(os.Args) > 1 {
73: scanner := bufio.NewScanner(reader)
74: for scanner.Scan() { //gdb-opt=(scanner/A)
@@ -96,3 +96,4 @@
87: if a == 0 { //gdb-opt=(a,n,t)
88: continue
86: for i, a := range hist {
+98: }
diff --git a/src/cmd/compile/internal/ssa/testdata/hist.dbg-gdb.nexts b/src/cmd/compile/internal/ssa/testdata/hist.dbg-gdb.nexts
index abd4535ca5..fe000147bd 100644
--- a/src/cmd/compile/internal/ssa/testdata/hist.dbg-gdb.nexts
+++ b/src/cmd/compile/internal/ssa/testdata/hist.dbg-gdb.nexts
@@ -1,5 +1,5 @@
src/cmd/compile/internal/ssa/testdata/hist.go
-55: func main() {
+55: func test() {
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58: tinycall() // this forces l etc to stack
59: dx := l.end.x - l.begin.x //gdb-dbg=(l.begin.x,l.end.y)//gdb-opt=(l,dx/O,dy/O)
@@ -7,10 +7,9 @@ l.begin.x = 1
l.end.y = 4
60: dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
61: sink = dx + dy //gdb-opt=(dx,dy)
-63: hist := make([]int, 7) //gdb-opt=(sink,dx/O,dy/O)
-64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A)
+63: hist := make([]int, 7) //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
+64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
hist = []int = {0, 0, 0, 0, 0, 0, 0}
-cannedInput = "1\n1\n1\n2\n2\n2\n4\n4\n5\n"
65: if len(os.Args) > 1 {
73: scanner := bufio.NewScanner(reader)
74: for scanner.Scan() { //gdb-opt=(scanner/A)
@@ -121,3 +120,4 @@ t = 22
87: if a == 0 { //gdb-opt=(a,n,t)
88: continue
86: for i, a := range hist {
+98: }
diff --git a/src/cmd/compile/internal/ssa/testdata/hist.go b/src/cmd/compile/internal/ssa/testdata/hist.go
index 7d1d06b47d..8a0cc27280 100644
--- a/src/cmd/compile/internal/ssa/testdata/hist.go
+++ b/src/cmd/compile/internal/ssa/testdata/hist.go
@@ -52,7 +52,7 @@ var cannedInput string = `1
5
`
-func main() {
+func test() {
// For #19868
l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
tinycall() // this forces l etc to stack
@@ -60,8 +60,8 @@ func main() {
dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
sink = dx + dy //gdb-opt=(dx,dy)
// For #21098
- hist := make([]int, 7) //gdb-opt=(sink,dx/O,dy/O)
- var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A)
+ hist := make([]int, 7) //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
+ var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
if len(os.Args) > 1 {
var err error
reader, err = os.Open(os.Args[1])
@@ -91,5 +91,8 @@ func main() {
n += a
fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
}
+}
+func main() {
+ test()
}
diff --git a/src/cmd/compile/internal/ssa/testdata/hist.opt-dlv.nexts b/src/cmd/compile/internal/ssa/testdata/hist.opt-dlv.nexts
index 7aab219552..b98e3c6e65 100644
--- a/src/cmd/compile/internal/ssa/testdata/hist.opt-dlv.nexts
+++ b/src/cmd/compile/internal/ssa/testdata/hist.opt-dlv.nexts
@@ -1,13 +1,13 @@
./testdata/hist.go
-55: func main() {
+55: func test() {
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58: tinycall() // this forces l etc to stack
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
59: dx := l.end.x - l.begin.x //gdb-dbg=(l.begin.x,l.end.y)//gdb-opt=(l,dx/O,dy/O)
60: dy := l.end.y - l.begin.y //gdb-opt=(dx,dy/O)
61: sink = dx + dy //gdb-opt=(dx,dy)
-63: hist := make([]int, 7) //gdb-opt=(sink,dx/O,dy/O)
-64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A)
+63: hist := make([]int, 7) //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
+64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
65: if len(os.Args) > 1 {
74: for scanner.Scan() { //gdb-opt=(scanner/A)
76: i, err := strconv.ParseInt(s, 10, 64)
@@ -102,3 +102,4 @@
92: fmt.Fprintf(os.Stderr, "%d\t%d\t%d\t%d\t%d\n", i, a, n, i*a, t) //gdb-dbg=(n,i,t)
87: if a == 0 { //gdb-opt=(a,n,t)
88: continue
+98: }
diff --git a/src/cmd/compile/internal/ssa/testdata/hist.opt-gdb.nexts b/src/cmd/compile/internal/ssa/testdata/hist.opt-gdb.nexts
index f6c6a3c9be..e4dc280869 100644
--- a/src/cmd/compile/internal/ssa/testdata/hist.opt-gdb.nexts
+++ b/src/cmd/compile/internal/ssa/testdata/hist.opt-gdb.nexts
@@ -1,5 +1,5 @@
src/cmd/compile/internal/ssa/testdata/hist.go
-55: func main() {
+55: func test() {
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
58: tinycall() // this forces l etc to stack
57: l := line{point{1 + zero, 2 + zero}, point{3 + zero, 4 + zero}}
@@ -13,11 +13,10 @@ dy = <Optimized out, as expected>
61: sink = dx + dy //gdb-opt=(dx,dy)
dx = 2
dy = 2
-63: hist := make([]int, 7) //gdb-opt=(sink,dx/O,dy/O)
-sink = 4
+63: hist := make([]int, 7) //gdb-opt=(dx/O,dy/O) // TODO sink is missing if this code is in 'test' instead of 'main'
dx = <Optimized out, as expected>
dy = <Optimized out, as expected>
-64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A,cannedInput/A)
+64: var reader io.Reader = strings.NewReader(cannedInput) //gdb-dbg=(hist/A) // TODO cannedInput/A is missing if this code is in 'test' instead of 'main'
65: if len(os.Args) > 1 {
73: scanner := bufio.NewScanner(reader)
74: for scanner.Scan() { //gdb-opt=(scanner/A)
@@ -180,3 +179,4 @@ a = 0
n = 9
t = 22
88: continue
+98: }
diff --git a/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-dlv.nexts b/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-dlv.nexts
new file mode 100644
index 0000000000..3c33fe0bfd
--- /dev/null
+++ b/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-dlv.nexts
@@ -0,0 +1,11 @@
+ ./testdata/i22558.go
+19: func test(t *thing, u *thing) {
+20: if t.next != nil {
+23: fmt.Fprintf(os.Stderr, "%s\n", t.name)
+24: u.self = u
+25: t.self = t
+26: t.next = u
+27: for _, p := range t.stuff {
+28: if isFoo(t, p) {
+29: return
+43: }
diff --git a/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-gdb.nexts b/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-gdb.nexts
new file mode 100644
index 0000000000..b88a227ec6
--- /dev/null
+++ b/src/cmd/compile/internal/ssa/testdata/i22558.dbg-22558-gdb.nexts
@@ -0,0 +1,11 @@
+ src/cmd/compile/internal/ssa/testdata/i22558.go
+19: func test(t *thing, u *thing) {
+20: if t.next != nil {
+23: fmt.Fprintf(os.Stderr, "%s\n", t.name)
+24: u.self = u
+25: t.self = t
+26: t.next = u
+27: for _, p := range t.stuff {
+28: if isFoo(t, p) {
+29: return
+43: }
diff --git a/src/cmd/compile/internal/ssa/testdata/i22558.go b/src/cmd/compile/internal/ssa/testdata/i22558.go
new file mode 100644
index 0000000000..a62e11e5eb
--- /dev/null
+++ b/src/cmd/compile/internal/ssa/testdata/i22558.go
@@ -0,0 +1,43 @@
+package main
+
+import (
+ "fmt"
+ "os"
+)
+
+type big struct {
+ pile [768]int8
+}
+
+type thing struct {
+ name string
+ next *thing
+ self *thing
+ stuff []big
+}
+
+func test(t *thing, u *thing) {
+ if t.next != nil {
+ return
+ }
+ fmt.Fprintf(os.Stderr, "%s\n", t.name)
+ u.self = u
+ t.self = t
+ t.next = u
+ for _, p := range t.stuff {
+ if isFoo(t, p) {
+ return
+ }
+ }
+}
+
+//go:noinline
+func isFoo(t *thing, b big) bool {
+ return true
+}
+
+func main() {
+ t := &thing{name: "t", self: nil, next: nil, stuff: make([]big, 1)}
+ u := thing{name: "u", self: t, next: t, stuff: make([]big, 1)}
+ test(t, &u)
+}
diff --git a/src/cmd/compile/internal/ssa/testdata/i22600.dbg-race-gdb.nexts b/src/cmd/compile/internal/ssa/testdata/i22600.dbg-race-gdb.nexts
index 681167d3af..bfffec4a5d 100644
--- a/src/cmd/compile/internal/ssa/testdata/i22600.dbg-race-gdb.nexts
+++ b/src/cmd/compile/internal/ssa/testdata/i22600.dbg-race-gdb.nexts
@@ -1,6 +1,7 @@
src/cmd/compile/internal/ssa/testdata/i22600.go
-8: func main() {
+8: func test() {
9: pwd, err := os.Getwd()
10: if err != nil {
14: fmt.Println(pwd)
15: }
+19: }
diff --git a/src/cmd/compile/internal/ssa/testdata/i22600.go b/src/cmd/compile/internal/ssa/testdata/i22600.go
index 8cecd14a4b..f7a7ade374 100644
--- a/src/cmd/compile/internal/ssa/testdata/i22600.go
+++ b/src/cmd/compile/internal/ssa/testdata/i22600.go
@@ -5,7 +5,7 @@ import (
"os"
)
-func main() {
+func test() {
pwd, err := os.Getwd()
if err != nil {
fmt.Println(err)
@@ -13,3 +13,7 @@ func main() {
}
fmt.Println(pwd)
}
+
+func main() {
+ test()
+}