// run // Copyright 2026 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 var sink *[16]byte //go:noinline func use(b []byte, x byte) { b[0] = x } //go:noinline func single(x byte) [16]byte { var ret [16]byte use(ret[:8], x) use(ret[8:], x+1) return ret } //go:noinline func addrTaken(x byte) [16]byte { var ret [16]byte p := &ret p[1] = x return ret } //go:noinline func captured(x byte) [16]byte { var ret [16]byte func() { ret[2] = x }() return ret } //go:noinline func multi(x byte, c bool) [16]byte { var ret [16]byte ret[4] = x if c { return ret } ret[5] = x + 1 return ret } //go:noinline func escaped(x byte, c bool) [16]byte { var ret [16]byte ret[3] = x sink = &ret if c { return ret } return [16]byte{4: 99} } //go:noinline func partial(x byte, c bool) [16]byte { var ret [16]byte ret[6] = x if c { return ret } return [16]byte{7: 77} } //go:noinline func partialNonCandidateLocal(x byte, c bool) [16]byte { var ret [16]byte ret[8] = x if c { return ret } other := [16]byte{9: 88} return other } func check(name string, got, want [16]byte) { if got != want { panic(name) } } func main() { var want [16]byte want[0] = 10 want[8] = 11 check("single", single(10), want) want = [16]byte{} want[1] = 12 check("addrTaken", addrTaken(12), want) want = [16]byte{} want[2] = 13 check("captured", captured(13), want) want = [16]byte{} want[4] = 15 check("multi true", multi(15, true), want) want[5] = 16 check("multi false", multi(15, false), want) want = [16]byte{} want[3] = 14 check("escaped true", escaped(14, true), want) if *sink != want { panic("escaped pointer") } want = [16]byte{4: 99} check("escaped false", escaped(14, false), want) want = [16]byte{} want[6] = 17 check("partial true", partial(17, true), want) want = [16]byte{7: 77} check("partial false", partial(17, false), want) want = [16]byte{} want[8] = 18 check("partialNonCandidateLocal true", partialNonCandidateLocal(18, true), want) want = [16]byte{9: 88} check("partialNonCandidateLocal false", partialNonCandidateLocal(18, false), want) }