github.com/s1s1ty/go@v0.0.0-20180207192209-104445e3140f/test/notinheap2.go (about) 1 // errorcheck -+ 2 3 // Copyright 2016 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // Test walk errors for go:notinheap. 8 9 package p 10 11 //go:notinheap 12 type nih struct { 13 next *nih 14 } 15 16 // Globals and stack variables are okay. 17 18 var x nih 19 20 func f() { 21 var y nih 22 x = y 23 } 24 25 // Heap allocation is not okay. 26 27 var y *nih 28 var z []nih 29 30 func g() { 31 y = new(nih) // ERROR "heap allocation disallowed" 32 z = make([]nih, 1) // ERROR "heap allocation disallowed" 33 z = append(z, x) // ERROR "heap allocation disallowed" 34 } 35 36 // Writes don't produce write barriers. 37 38 var p *nih 39 40 //go:nowritebarrier 41 func h() { 42 y.next = p.next 43 }