| // 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. |
| |
| // Existing pull linknames in the wild are allowed _for now_, |
| // for legacy reason. Test a function, a method, and an |
| // assembly symbol. |
| // NOTE: this may not be allowed in the future. Don't do this! |
| |
| package main |
| |
| import ( |
| _ "reflect" |
| "unsafe" |
| ) |
| |
| //go:linkname noescape runtime.noescape |
| func noescape(unsafe.Pointer) unsafe.Pointer |
| |
| //go:linkname rtype_String reflect.(*rtype).String |
| func rtype_String(unsafe.Pointer) string |
| |
| //go:linkname memmove runtime.memmove |
| func memmove(to, from unsafe.Pointer, n uintptr) |
| |
| var n uintptr // use a global to prevent compiler optimize out memmove call |
| |
| func main() { |
| println(rtype_String(noescape(nil))) |
| memmove(nil, nil, n) |
| } |