// 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 | |
} |