// run // Copyright 2021 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. package main import "fmt" type T [8]*int //go:noinline func f(x int) T { return T{} } //go:noinline func g(x int, t T) { if t != (T{}) { panic(fmt.Sprintf("bad: %v", t)) } } func main() { const N = 10000 var q T func() { for i := 0; i < N; i++ { q = f(0) g(0, q) sink = make([]byte, 1024) } }() // Note that the closure is a trick to get the write to q to be a // write to a pointer that is known to be non-nil and requires // a write barrier. } var sink []byte