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 | 669e1655bb515f8eb68dae134a791b8fa0a32216 (patch) | |
tree | 1d1b8e87bd06ba625a6f4a8062349084add65b65 /test/stack.go | |
parent | a2c1e3912b8a9917ebb7c583bc7848064e2eb1ba (diff) | |
download | go-669e1655bb515f8eb68dae134a791b8fa0a32216.tar.gz |
5l, 8l: pass stack frame size to morestack when needed
Shame on me: I fixed the same bug in 6l in 8691fcc6a66e
(http://codereview.appspot.com/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 issue 1457.
R=ken2
CC=golang-dev
http://codereview.appspot.com/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 816b555a4..1fd57161f 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) |