]> Cypherpunks.ru repositories - gostls13.git/blob - test/fixedbugs/issue24491b.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / fixedbugs / issue24491b.go
1 // run
2
3 // Copyright 2020 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 // This test makes sure unsafe-uintptr arguments are not
8 // kept alive longer than expected.
9
10 package main
11
12 import (
13         "runtime"
14         "unsafe"
15 )
16
17 var done = make(chan bool)
18
19 func setup() unsafe.Pointer {
20         s := "ok"
21         runtime.SetFinalizer(&s, func(p *string) { close(done) })
22         return unsafe.Pointer(&s)
23 }
24
25 //go:noinline
26 //go:uintptrescapes
27 func before(p uintptr) int {
28         runtime.GC()
29         select {
30         case <-done:
31                 panic("GC early")
32         default:
33         }
34         return 0
35 }
36
37 func after() int {
38         runtime.GC()
39         runtime.GC()
40         <-done
41         return 0
42 }
43
44 func main() {
45         _ = before(uintptr(setup())) + after()
46 }