]> Cypherpunks.ru repositories - gostls13.git/blob - test/gcstring.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / gcstring.go
1 // run
2
3 // Copyright 2014 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
6
7 // Test that s[len(s):] - which can point past the end of the allocated block -
8 // does not confuse the garbage collector.
9
10 package main
11
12 import (
13         "runtime"
14         "time"
15 )
16
17 type T struct {
18         ptr **int
19         pad [120]byte
20 }
21
22 var things []interface{}
23
24 func main() {
25         setup()
26         runtime.GC()
27         runtime.GC()
28         time.Sleep(10*time.Millisecond)
29         runtime.GC()
30         runtime.GC()
31         time.Sleep(10*time.Millisecond)
32 }
33
34 func setup() {
35         var Ts []interface{}
36         buf := make([]byte, 128)
37         
38         for i := 0; i < 10000; i++ {
39                 s := string(buf)
40                 t := &T{ptr: new(*int)}
41                 runtime.SetFinalizer(t.ptr, func(**int) { panic("*int freed too early") })
42                 Ts = append(Ts, t)
43                 things = append(things, s[len(s):])
44         }
45         
46         things = append(things, Ts...)
47 }
48