Initial commit: Go 1.23 release state
This commit is contained in:
54
test/uintptrescapes.dir/a.go
Normal file
54
test/uintptrescapes.dir/a.go
Normal file
@@ -0,0 +1,54 @@
|
||||
// Copyright 2016 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.
|
||||
|
||||
package a
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
func recurse(i int, s []byte) byte {
|
||||
s[0] = byte(i)
|
||||
if i == 0 {
|
||||
return s[i]
|
||||
} else {
|
||||
var a [1024]byte
|
||||
r := recurse(i-1, a[:])
|
||||
return r + a[0]
|
||||
}
|
||||
}
|
||||
|
||||
//go:uintptrescapes
|
||||
func F1(a uintptr) {
|
||||
var s [16]byte
|
||||
recurse(4096, s[:])
|
||||
*(*int)(unsafe.Pointer(a)) = 42
|
||||
}
|
||||
|
||||
//go:uintptrescapes
|
||||
func F2(a ...uintptr) {
|
||||
var s [16]byte
|
||||
recurse(4096, s[:])
|
||||
*(*int)(unsafe.Pointer(a[0])) = 42
|
||||
}
|
||||
|
||||
type t struct{}
|
||||
|
||||
func GetT() *t {
|
||||
return &t{}
|
||||
}
|
||||
|
||||
//go:uintptrescapes
|
||||
func (*t) M1(a uintptr) {
|
||||
var s [16]byte
|
||||
recurse(4096, s[:])
|
||||
*(*int)(unsafe.Pointer(a)) = 42
|
||||
}
|
||||
|
||||
//go:uintptrescapes
|
||||
func (*t) M2(a ...uintptr) {
|
||||
var s [16]byte
|
||||
recurse(4096, s[:])
|
||||
*(*int)(unsafe.Pointer(a[0])) = 42
|
||||
}
|
||||
Reference in New Issue
Block a user