modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/uintptrescapes.dir/a.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package a 6 7 import ( 8 "unsafe" 9 ) 10 11 func recurse(i int, s []byte) byte { 12 s[0] = byte(i) 13 if i == 0 { 14 return s[i] 15 } else { 16 var a [1024]byte 17 r := recurse(i-1, a[:]) 18 return r + a[0] 19 } 20 } 21 22 //go:uintptrescapes 23 func F1(a uintptr) { 24 var s [16]byte 25 recurse(4096, s[:]) 26 *(*int)(unsafe.Pointer(a)) = 42 27 } 28 29 //go:uintptrescapes 30 func F2(a ...uintptr) { 31 var s [16]byte 32 recurse(4096, s[:]) 33 *(*int)(unsafe.Pointer(a[0])) = 42 34 } 35 36 type t struct{} 37 38 func GetT() *t { 39 return &t{} 40 } 41 42 //go:uintptrescapes 43 func (*t) M1(a uintptr) { 44 var s [16]byte 45 recurse(4096, s[:]) 46 *(*int)(unsafe.Pointer(a)) = 42 47 } 48 49 //go:uintptrescapes 50 func (*t) M2(a ...uintptr) { 51 var s [16]byte 52 recurse(4096, s[:]) 53 *(*int)(unsafe.Pointer(a[0])) = 42 54 }