github.com/geraldss/go/src@v0.0.0-20210511222824-ac7d0ebfc235/runtime/testdata/testprog/checkptr.go (about) 1 // Copyright 2020 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 main 6 7 import "unsafe" 8 9 func init() { 10 register("CheckPtrAlignmentNoPtr", CheckPtrAlignmentNoPtr) 11 register("CheckPtrAlignmentPtr", CheckPtrAlignmentPtr) 12 register("CheckPtrArithmetic", CheckPtrArithmetic) 13 register("CheckPtrArithmetic2", CheckPtrArithmetic2) 14 register("CheckPtrSize", CheckPtrSize) 15 register("CheckPtrSmall", CheckPtrSmall) 16 } 17 18 func CheckPtrAlignmentNoPtr() { 19 var x [2]int64 20 p := unsafe.Pointer(&x[0]) 21 sink2 = (*int64)(unsafe.Pointer(uintptr(p) + 1)) 22 } 23 24 func CheckPtrAlignmentPtr() { 25 var x [2]int64 26 p := unsafe.Pointer(&x[0]) 27 sink2 = (**int64)(unsafe.Pointer(uintptr(p) + 1)) 28 } 29 30 func CheckPtrArithmetic() { 31 var x int 32 i := uintptr(unsafe.Pointer(&x)) 33 sink2 = (*int)(unsafe.Pointer(i)) 34 } 35 36 func CheckPtrArithmetic2() { 37 var x [2]int64 38 p := unsafe.Pointer(&x[1]) 39 var one uintptr = 1 40 sink2 = unsafe.Pointer(uintptr(p) & ^one) 41 } 42 43 func CheckPtrSize() { 44 p := new(int64) 45 sink2 = p 46 sink2 = (*[100]int64)(unsafe.Pointer(p)) 47 } 48 49 func CheckPtrSmall() { 50 sink2 = unsafe.Pointer(uintptr(1)) 51 }