aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/stack_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/stack_test.go')
-rw-r--r--src/runtime/stack_test.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/runtime/stack_test.go b/src/runtime/stack_test.go
index 43fc5cac55..3f02243a1e 100644
--- a/src/runtime/stack_test.go
+++ b/src/runtime/stack_test.go
@@ -585,6 +585,34 @@ func count21(n int) int { return 1 + count22(n-1) }
func count22(n int) int { return 1 + count23(n-1) }
func count23(n int) int { return 1 + count1(n-1) }
+type stkobjT struct {
+ p *stkobjT
+ x int64
+ y [20]int // consume some stack
+}
+
+// Sum creates a linked list of stkobjTs.
+func Sum(n int64, p *stkobjT) {
+ if n == 0 {
+ return
+ }
+ s := stkobjT{p: p, x: n}
+ Sum(n-1, &s)
+ p.x += s.x
+}
+
+func BenchmarkStackCopyWithStkobj(b *testing.B) {
+ c := make(chan bool)
+ for i := 0; i < b.N; i++ {
+ go func() {
+ var s stkobjT
+ Sum(100000, &s)
+ c <- true
+ }()
+ <-c
+ }
+}
+
type structWithMethod struct{}
func (s structWithMethod) caller() string {