compiler: add go:notinheap magic comment
Implement go:notinheap as the gc compiler does. A type marked as
go:notinheap may not live in the heap, and does not require a write
barrier. Struct and array types that incorporate notinheap types are
themselves notinheap. Allocating a value of a notinheap type on the
heap is an error.
This is not just an optimization. There is code where a write barrier
may not occur that was getting a write barrier with gccgo but not gc,
because the types in question were notinheap. The case I found was
setting the mcache field in exitsyscallfast.
Reviewed-by: Than McIntosh <email@example.com>
9 files changed