uintptr to unsafe.Pointer.
A conversion from
uintptr to unsafe.Pointer is invalid if it implies that there is a uintptr-typed word
in memory that holds a pointer value, because that word will be invisible to stack copying and to the garbage collector.
Example of invalid usage:
nums := []int8{42, 24}
ptr := unsafe.Pointer(&nums[0])
addr := uintptr(ptr) // address is stored to a local variable
ptr = unsafe.Pointer(addr + uintptr(1))
Example of valid usage:
nums := []int8{42, 24}
ptr := unsafe.Pointer(&nums[0])
ptr = unsafe.Pointer(uintptr(ptr) + uintptr(1))