summaryrefslogtreecommitdiff
path: root/test/stack.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/stack.go')
-rw-r--r--test/stack.go99
1 files changed, 0 insertions, 99 deletions
diff --git a/test/stack.go b/test/stack.go
deleted file mode 100644
index 1fd57161f..000000000
--- a/test/stack.go
+++ /dev/null
@@ -1,99 +0,0 @@
-// $G $D/$F.go && $L $F.$A && ./$A.out
-
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Try to tickle stack splitting bugs by doing
-// go, defer, and closure calls at different stack depths.
-
-package main
-
-type T [20]int
-
-func g(c chan int, t T) {
- s := 0
- for i := 0; i < len(t); i++ {
- s += t[i]
- }
- c <- s
-}
-
-func d(t T) {
- s := 0
- for i := 0; i < len(t); i++ {
- s += t[i]
- }
- if s != len(t) {
- println("bad defer", s)
- panic("fail")
- }
-}
-
-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}
-
-func recur(n int) {
- ss := string(b)
- if len(ss) != len(b) {
- panic("bad []byte -> string")
- }
- go g(c, t)
- f0()
- s := <-c
- if s != len(t) {
- println("bad go", s)
- panic("fail")
- }
- f := func(t T) int {
- s := 0
- for i := 0; i < len(t); i++ {
- s += t[i]
- }
- s += n
- return s
- }
- s = f(t)
- if s != len(t)+n {
- println("bad func", s, "at level", n)
- panic("fail")
- }
- if n > 0 {
- recur(n - 1)
- }
- defer d(t)
-}
-
-func main() {
- for i := 0; i < len(t); i++ {
- t[i] = 1
- }
- recur(8000)
-}