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 5package a 6 7import ( 8 "unsafe" 9) 10 11func 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 23func F1(a uintptr) { 24 var s [16]byte 25 recurse(4096, s[:]) 26 *(*int)(unsafe.Pointer(a)) = 42 27} 28 29//go:uintptrescapes 30func F2(a ...uintptr) { 31 var s [16]byte 32 recurse(4096, s[:]) 33 *(*int)(unsafe.Pointer(a[0])) = 42 34} 35 36type t struct{} 37 38func GetT() *t { 39 return &t{} 40} 41 42//go:uintptrescapes 43func (*t) M1(a uintptr) { 44 var s [16]byte 45 recurse(4096, s[:]) 46 *(*int)(unsafe.Pointer(a)) = 42 47} 48 49//go:uintptrescapes 50func (*t) M2(a ...uintptr) { 51 var s [16]byte 52 recurse(4096, s[:]) 53 *(*int)(unsafe.Pointer(a[0])) = 42 54} 55