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  }