Source file test/maymorestack.go
1 // run -gcflags=-d=maymorestack=main.mayMoreStack 2 3 // Copyright 2021 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 the maymorestack testing hook by injecting a hook that counts 8 // how many times it is called and checking that count. 9 10 package main 11 12 import "runtime" 13 14 var count uint32 15 16 //go:nosplit 17 func mayMoreStack() { 18 count++ 19 } 20 21 func main() { 22 const wantCount = 128 23 24 anotherFunc(wantCount - 1) // -1 because the call to main already counted 25 26 if count == 0 { 27 panic("mayMoreStack not called") 28 } else if count != wantCount { 29 println(count, "!=", wantCount) 30 panic("wrong number of calls to mayMoreStack") 31 } 32 } 33 34 //go:noinline 35 func anotherFunc(n int) { 36 // Trigger a stack growth on at least some calls to 37 // anotherFunc to test that mayMoreStack is called outside the 38 // morestack loop. It's also important that it is called 39 // before (not after) morestack, but that's hard to test. 40 var x [1 << 10]byte 41 42 if n > 1 { 43 anotherFunc(n - 1) 44 } 45 46 runtime.KeepAlive(x) 47 } 48