compiler: add //go:noescape pragma

This only works on declarations, not definitions. This is intentional:
it follows the upstream Go implemetation.

However, we might want to loosen this requirement at some point: TinyGo
sometimes stores pointers in memory mapped I/O knowing they won't
actually escape, but the compiler doesn't know about this.
This commit is contained in:
Ayke van Laethem
2023-09-02 13:11:36 +02:00
committed by Ron Evans
parent d1fe02df23
commit fd625f7265
4 changed files with 44 additions and 8 deletions
+9
View File
@@ -106,3 +106,12 @@ var undefinedGlobalNotInSection uint32
//go:align 1024
//go:section .global_section
var multipleGlobalPragmas uint32
//go:noescape
func doesNotEscapeParam(a *int, b []int, c chan int, d *[0]byte)
// The //go:noescape pragma only works on declarations, not definitions.
//
//go:noescape
func stillEscapes(a *int, b []int, c chan int, d *[0]byte) {
}