blob: 726e3c4815c1be584523efa77e8d72e7d30de960 [file]
// 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.
// This tests an SSA-able stack temporary whose address must refer to its stack
// slot. Without the addrtaken mark, (*state).addr returns &runtime.zerobase and
// runtime.deferprocStack follows a corrupted _defer record.
//
// On 64-bit systems, runtime._defer is 48 bytes with 7 fields and fits the
// current SSA limits. Nine defers force the non-open-coded deferprocStack path.
package main
var n int
func sink() { n++ }
//go:noinline
func nineDefers() {
defer sink()
defer sink()
defer sink()
defer sink()
defer sink()
defer sink()
defer sink()
defer sink()
defer sink()
}
func main() {
nineDefers()
if n != 9 {
println("n =", n, "want 9")
panic("defer chain corrupted")
}
}