diff options
author | Russ Cox <rsc@golang.org> | 2011-02-01 18:34:41 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2011-02-01 18:34:41 -0500 |
commit | 1fa41734441ba95f06171db25af7769f6ae26b30 (patch) | |
tree | b89bde8ee3d0eb65fe626aec9dbdc9d74ae521a7 /test/stack.go | |
parent | 80f07cfbeadb2c008827f6d6ce4ddd70d7cf0528 (diff) | |
download | go-1fa41734441ba95f06171db25af7769f6ae26b30.tar.gz go-1fa41734441ba95f06171db25af7769f6ae26b30.zip |
5l, 8l: pass stack frame size to morestack when needed
Shame on me: I fixed the same bug in 6l in 8691fcc6a66e
(https://golang.org/cl/2609041) and neglected
to look at 5l and 8l to see if they were affected.
On the positive side, the check I added in that CL is the
one that detected this bug.
Fixes #1457.
R=ken2
CC=golang-dev
https://golang.org/cl/3981052
Diffstat (limited to 'test/stack.go')
-rw-r--r-- | test/stack.go | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/stack.go b/test/stack.go index 816b555a4c..1fd57161ff 100644 --- a/test/stack.go +++ b/test/stack.go @@ -30,6 +30,32 @@ func d(t T) { } } +func f0() { + // likely to make a new stack for f0, + // because the call to f1 puts 3000 bytes + // in our frame. + f1() +} + +func f1() [3000]byte { + // likely to make a new stack for f1, + // because 3000 bytes were used by f0 + // and we need 3000 more for the call + // to f2. if the call to morestack in f1 + // does not pass the frame size, the new + // stack (default size 5k) will not be big + // enough for the frame, and the morestack + // check in f2 will die, if we get that far + // without faulting. + f2() + return [3000]byte{} +} + +func f2() [3000]byte { + // just take up space + return [3000]byte{} +} + var c = make(chan int) var t T var b = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} @@ -40,6 +66,7 @@ func recur(n int) { panic("bad []byte -> string") } go g(c, t) + f0() s := <-c if s != len(t) { println("bad go", s) |