| // errorcheck -+ |
| |
| // Copyright 2016 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. |
| |
| // Test walk errors for go:notinheap. |
| |
| package p |
| |
| //go:notinheap |
| type nih struct { |
| next *nih |
| } |
| |
| // Globals and stack variables are okay. |
| |
| var x nih |
| |
| func f() { |
| var y nih |
| x = y |
| } |
| |
| // Heap allocation is not okay. |
| |
| var y *nih |
| var z []nih |
| |
| func g() { |
| y = new(nih) // ERROR "heap allocation disallowed" |
| z = make([]nih, 1) // ERROR "heap allocation disallowed" |
| z = append(z, x) // ERROR "heap allocation disallowed" |
| } |
| |
| // Writes don't produce write barriers. |
| |
| var p *nih |
| |
| //go:nowritebarrier |
| func h() { |
| y.next = p.next |
| } |