From the unsafe.Pointer docs:
Note that both conversions must appear in the same expression, with only the intervening arithmetic between them:
// INVALID: uintptr cannot be stored in variable
// before conversion back to Pointer.
u := uintptr(p)
p = unsafe.Pointer(u + offset)
I have definitely seen (and written) this idiom before in the runtime code (although a specific example eludes me at the moment). We should verify this in the unsafeptr analysis pass