]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: grow stack before test() to avoid gdb misbehavior
authorDavid Chase <drchase@google.com>
Tue, 22 May 2018 18:45:27 +0000 (14:45 -0400)
committerDavid Chase <drchase@google.com>
Wed, 23 May 2018 18:05:07 +0000 (18:05 +0000)
While next-ing over a call in gdb, if execution of that call
causes a goroutine's stack to grow (i.e., be moved), gdb loses
track and runs ahead to the next breakpoint, or to the end of
the program, whichever comes first.

Prevent this by preemptively growing the stack so that
ssa/debug_test.go will reliably measure what is intended,
the goodness of line number placement and variable printing.

Fixes #25497.

Change-Id: I8daf931650292a8c8faad2285d7fd405f2157bd2
Reviewed-on: https://go-review.googlesource.com/114080
Run-TryBot: David Chase <drchase@google.com>
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

15 files changed:
src/cmd/compile/internal/ssa/testdata/hist.dlv-dbg.nexts
src/cmd/compile/internal/ssa/testdata/hist.dlv-opt.nexts
src/cmd/compile/internal/ssa/testdata/hist.gdb-dbg.nexts
src/cmd/compile/internal/ssa/testdata/hist.gdb-opt.nexts
src/cmd/compile/internal/ssa/testdata/hist.go
src/cmd/compile/internal/ssa/testdata/i22558.dlv-dbg.nexts
src/cmd/compile/internal/ssa/testdata/i22558.go
src/cmd/compile/internal/ssa/testdata/i22600.dlv-dbg-race.nexts
src/cmd/compile/internal/ssa/testdata/i22600.gdb-dbg-race.nexts
src/cmd/compile/internal/ssa/testdata/i22600.go
src/cmd/compile/internal/ssa/testdata/scopes.dlv-dbg.nexts
src/cmd/compile/internal/ssa/testdata/scopes.dlv-opt.nexts
src/cmd/compile/internal/ssa/testdata/scopes.gdb-dbg.nexts
src/cmd/compile/internal/ssa/testdata/scopes.gdb-opt.nexts
src/cmd/compile/internal/ssa/testdata/scopes.go

index ec79b77de277c8dc9742a62a15c99e2cf139b1de..a0404e4786b5cfedfdf422116ca001326d8fba50 100644 (file)
@@ -96,4 +96,4 @@
 87:                    if a == 0 { //gdb-opt=(a,n,t)
 88:                            continue
 86:            for i, a := range hist {
-98:    }
+99:    }
index 3f10e15aa0ad09db24d70b3df44c68b207c89d58..089d176c60e1569ca6127b4dbd3b14dcf45460a7 100644 (file)
 86:            for i, a := range hist {
 87:                    if a == 0 { //gdb-opt=(a,n,t)
 86:            for i, a := range hist {
-98:    }
+99:    }
index fe000147bde4f07bc243aefd55703aab13606bcf..4fde3bcc66ba5c276f0204b372dafefc2ec067b0 100644 (file)
@@ -120,4 +120,4 @@ t = 22
 87:                    if a == 0 { //gdb-opt=(a,n,t)
 88:                            continue
 86:            for i, a := range hist {
-98:    }
+99:    }
index e04158982e35de3f6a487ccf1d6c7be561566d61..ad2719185e501cd83a2ee9d3405da318f177d2f2 100644 (file)
@@ -158,4 +158,4 @@ a = 0
 n = 9
 t = 22
 86:            for i, a := range hist {
-98:    }
+99:    }
index 8a0cc2728081abee0f54c47e2414a42c0fac5cba..f8fa6e670eebe17109d2e7575f301e7395a43558 100644 (file)
@@ -94,5 +94,13 @@ func test() {
 }
 
 func main() {
+       growstack() // Use stack early to prevent growth during test, which confuses gdb
        test()
 }
+
+var snk string
+
+//go:noinline
+func growstack() {
+       snk = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat")
+}
index 3c33fe0bfd2ddd608223f946031b522b34ba6d72..a00934be18e0335e3c85f33c5e68e281420180cb 100644 (file)
@@ -8,4 +8,4 @@
 27:            for _, p := range t.stuff {
 28:                    if isFoo(t, p) {
 29:                            return
-43:    }
+44:    }
index a62e11e5ebe25dbd3e17e751e09fdfa44dd15df6..8aea76c3c05224cf909a8ef6ab772df8d596a500 100644 (file)
@@ -37,7 +37,15 @@ func isFoo(t *thing, b big) bool {
 }
 
 func main() {
+       growstack() // Use stack early to prevent growth during test, which confuses gdb
        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)
 }
+
+var snk string
+
+//go:noinline
+func growstack() {
+       snk = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat")
+}
index 46aad7c913610654a191a2f69c90dd360a3d64e5..18a5ff9247410a4d699e724525fd1d67d0be8d01 100644 (file)
@@ -4,4 +4,4 @@
 10:            if err != nil {
 14:            fmt.Println(pwd)
 15:    }
-19:    }
+20:    }
index bfffec4a5dc5a6e20564283fa37966c9bc11f23c..46285e2078becf90baa674f750aa1298f3f9e7f1 100644 (file)
@@ -4,4 +4,4 @@
 10:            if err != nil {
 14:            fmt.Println(pwd)
 15:    }
-19:    }
+20:    }
index f7a7ade37467653d1f0fb461e66f6cdc6e309ce1..27f0d3d565f8694821b7054d9cd4ac6d03a2726a 100644 (file)
@@ -15,5 +15,13 @@ func test() {
 }
 
 func main() {
+       growstack() // Use stack early to prevent growth during test, which confuses gdb
        test()
 }
+
+var snk string
+
+//go:noinline
+func growstack() {
+       snk = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat")
+}
index 8151b59475e52bef8aaba62786d23036f4336b8f..f182ff45d45dfae92bdbe344a53b7dcb6dcf11e9 100644 (file)
@@ -1,56 +1,56 @@
   ./testdata/scopes.go
-21:    func test() {
-22:            x := id(0)
-23:            y := id(0)
-24:            fmt.Println(x)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-30:            fmt.Println(x, y)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-33:                    a := y
-34:                    f1(a)
-36:                            b := 0
-37:                            f2(b)
-38:                            if gretbool() {
-39:                                    c := 0
-40:                                    f3(c)
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-33:                    a := y
-34:                    f1(a)
-36:                            b := 0
-37:                            f2(b)
-38:                            if gretbool() {
-42:                                    c := 1.1
-43:                                    f4(int(c))
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-52:                            j = id(1)
-53:                            f = id(2)
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-58:                                    fmt.Println("foo")
-59:                                    break
-63:                    helloworld()
-65:    }
-14:    }
+22:    func test() {
+23:            x := id(0)
+24:            y := id(0)
+25:            fmt.Println(x)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+31:            fmt.Println(x, y)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+34:                    a := y
+35:                    f1(a)
+37:                            b := 0
+38:                            f2(b)
+39:                            if gretbool() {
+40:                                    c := 0
+41:                                    f3(c)
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+34:                    a := y
+35:                    f1(a)
+37:                            b := 0
+38:                            f2(b)
+39:                            if gretbool() {
+43:                                    c := 1.1
+44:                                    f4(int(c))
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+53:                            j = id(1)
+54:                            f = id(2)
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+59:                                    fmt.Println("foo")
+60:                                    break
+64:                    helloworld()
+66:    }
+15:    }
index 2036f398a45b3f5fb7e3f21dc3811c90c7e3f32e..1af55df4a089b85e5240f76629576edbba57f224 100644 (file)
@@ -1,63 +1,63 @@
   ./testdata/scopes.go
-21:    func test() {
-22:            x := id(0)
-23:            y := id(0)
-24:            fmt.Println(x)
-25:            for i := x; i < 3; i++ {
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-25:            for i := x; i < 3; i++ {
-30:            fmt.Println(x, y)
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
-30:            fmt.Println(x, y)
-21:    func test() {
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-34:                    f1(a)
-37:                            f2(b)
-38:                            if gretbool() {
-40:                                    f3(c)
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-34:                    f1(a)
-37:                            f2(b)
-38:                            if gretbool() {
-43:                                    f4(int(c))
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-52:                            j = id(1)
-53:                            f = id(2)
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-55:                    for i := 0; i <= 5; i++ {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-55:                    for i := 0; i <= 5; i++ {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-58:                                    fmt.Println("foo")
-63:                    helloworld()
-65:    }
-14:    }
+22:    func test() {
+23:            x := id(0)
+24:            y := id(0)
+25:            fmt.Println(x)
+26:            for i := x; i < 3; i++ {
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+31:            fmt.Println(x, y)
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+31:            fmt.Println(x, y)
+22:    func test() {
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+35:                    f1(a)
+38:                            f2(b)
+39:                            if gretbool() {
+41:                                    f3(c)
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+35:                    f1(a)
+38:                            f2(b)
+39:                            if gretbool() {
+44:                                    f4(int(c))
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+53:                            j = id(1)
+54:                            f = id(2)
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+56:                    for i := 0; i <= 5; i++ {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+56:                    for i := 0; i <= 5; i++ {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+59:                                    fmt.Println("foo")
+64:                    helloworld()
+66:    }
+15:    }
index 813a71de7eea46b0f98a4c4b97a35a6c086e3c5f..6eb490391113a7d7f5df008a9ab07da6133550ce 100644 (file)
@@ -1,64 +1,64 @@
   src/cmd/compile/internal/ssa/testdata/scopes.go
-21:    func test() {
-22:            x := id(0)
-23:            y := id(0)
-24:            fmt.Println(x)
+22:    func test() {
+23:            x := id(0)
+24:            y := id(0)
+25:            fmt.Println(x)
 0:
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 0
 y = 0
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 1
 y = 0
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 4
 y = 1
-25:            for i := x; i < 3; i++ {
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 0
 y = 5
-30:            fmt.Println(x, y)
+31:            fmt.Println(x, y)
 0: 5
-33:                    a := y
-34:                    f1(a)
-36:                            b := 0
-37:                            f2(b)
-38:                            if gretbool() {
-39:                                    c := 0
-40:                                    f3(c)
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-33:                    a := y
-34:                    f1(a)
-36:                            b := 0
-37:                            f2(b)
-38:                            if gretbool() {
-42:                                    c := 1.1
-43:                                    f4(int(c))
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-52:                            j = id(1)
-53:                            f = id(2)
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-56:                            j += j * (j ^ 3) / 100
-57:                            if i == f {
-58:                                    fmt.Println("foo")
-59:                                    break
-63:                    helloworld()
-65:    }
-14:    }
+34:                    a := y
+35:                    f1(a)
+37:                            b := 0
+38:                            f2(b)
+39:                            if gretbool() {
+40:                                    c := 0
+41:                                    f3(c)
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+34:                    a := y
+35:                    f1(a)
+37:                            b := 0
+38:                            f2(b)
+39:                            if gretbool() {
+43:                                    c := 1.1
+44:                                    f4(int(c))
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+53:                            j = id(1)
+54:                            f = id(2)
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+57:                            j += j * (j ^ 3) / 100
+58:                            if i == f {
+59:                                    fmt.Println("foo")
+60:                                    break
+64:                    helloworld()
+66:    }
+15:    }
index b6382375d40f013ed0d8b42b703927e4d61be663..a66eab83cd38837c960d128d50f8808da4847baa 100644 (file)
@@ -1,54 +1,54 @@
   src/cmd/compile/internal/ssa/testdata/scopes.go
-21:    func test() {
-22:            x := id(0)
-23:            y := id(0)
-24:            fmt.Println(x)
+22:    func test() {
+23:            x := id(0)
+24:            y := id(0)
+25:            fmt.Println(x)
 0:
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 0
 y = 0
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 1
 y = 0
-25:            for i := x; i < 3; i++ {
-26:                    x := i * i
-27:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+27:                    x := i * i
+28:                    y += id(x) //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 4
 y = 1
-25:            for i := x; i < 3; i++ {
-30:            fmt.Println(x, y)
-29:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
+26:            for i := x; i < 3; i++ {
+31:            fmt.Println(x, y)
+30:            y = x + y //gdb-dbg=(x,y)//gdb-opt=(x,y)
 x = 0
 y = 5
 0: 5
-34:                    f1(a)
-37:                            f2(b)
-38:                            if gretbool() {
-40:                                    f3(c)
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-34:                    f1(a)
-37:                            f2(b)
-38:                            if gretbool() {
-43:                                    f4(int(c))
-45:                            f5(b)
-47:                    f6(a)
-32:            for x := 0; x <= 1; x++ { // From delve scopetest.go
-52:                            j = id(1)
-53:                            f = id(2)
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-61:                            sleepytime()
-55:                    for i := 0; i <= 5; i++ {
-57:                            if i == f {
-58:                                    fmt.Println("foo")
-63:                    helloworld()
-65:    }
-14:    }
+35:                    f1(a)
+38:                            f2(b)
+39:                            if gretbool() {
+41:                                    f3(c)
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+35:                    f1(a)
+38:                            f2(b)
+39:                            if gretbool() {
+44:                                    f4(int(c))
+46:                            f5(b)
+48:                    f6(a)
+33:            for x := 0; x <= 1; x++ { // From delve scopetest.go
+53:                            j = id(1)
+54:                            f = id(2)
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+62:                            sleepytime()
+56:                    for i := 0; i <= 5; i++ {
+58:                            if i == f {
+59:                                    fmt.Println("foo")
+64:                    helloworld()
+66:    }
+15:    }
index 3dab51908a4dc798adabb521fc0c9ed2797357a9..e93d69936fb2d3120d5a002ee3b37d7ae4039527 100644 (file)
@@ -10,6 +10,7 @@ import (
 )
 
 func main() {
+       growstack() // Use stack early to prevent growth during test, which confuses gdb
        test()
 }
 
@@ -97,3 +98,10 @@ func gretbool() bool {
        boolvar = !boolvar
        return x
 }
+
+var sink string
+
+//go:noinline
+func growstack() {
+       sink = fmt.Sprintf("%#v,%#v,%#v", 1, true, "cat")
+}