| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package abi |
| |
| import "unsafe" |
| |
| // NoEscape hides the pointer p from escape analysis, preventing it |
| // from escaping to the heap. It compiles down to nothing. |
| // |
| // WARNING: This is very subtle to use correctly. The caller must |
| // ensure that it's truly safe for p to not escape to the heap by |
| // maintaining runtime pointer invariants (for example, that globals |
| // and the heap may not generally point into a stack). |
| // |
| //go:nosplit |
| //go:nocheckptr |
| func NoEscape(p unsafe.Pointer) unsafe.Pointer { |
| x := uintptr(p) |
| return unsafe.Pointer(x ^ 0) |
| } |