Initial commit: Go 1.23 release state
This commit is contained in:
47
test/maymorestack.go
Normal file
47
test/maymorestack.go
Normal file
@@ -0,0 +1,47 @@
|
||||
// run -gcflags=-d=maymorestack=main.mayMoreStack
|
||||
|
||||
// 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.
|
||||
|
||||
// Test the maymorestack testing hook by injecting a hook that counts
|
||||
// how many times it is called and checking that count.
|
||||
|
||||
package main
|
||||
|
||||
import "runtime"
|
||||
|
||||
var count uint32
|
||||
|
||||
//go:nosplit
|
||||
func mayMoreStack() {
|
||||
count++
|
||||
}
|
||||
|
||||
func main() {
|
||||
const wantCount = 128
|
||||
|
||||
anotherFunc(wantCount - 1) // -1 because the call to main already counted
|
||||
|
||||
if count == 0 {
|
||||
panic("mayMoreStack not called")
|
||||
} else if count != wantCount {
|
||||
println(count, "!=", wantCount)
|
||||
panic("wrong number of calls to mayMoreStack")
|
||||
}
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func anotherFunc(n int) {
|
||||
// Trigger a stack growth on at least some calls to
|
||||
// anotherFunc to test that mayMoreStack is called outside the
|
||||
// morestack loop. It's also important that it is called
|
||||
// before (not after) morestack, but that's hard to test.
|
||||
var x [1 << 10]byte
|
||||
|
||||
if n > 1 {
|
||||
anotherFunc(n - 1)
|
||||
}
|
||||
|
||||
runtime.KeepAlive(x)
|
||||
}
|
||||
Reference in New Issue
Block a user