Initial commit: Go 1.23 release state
This commit is contained in:
64
test/fixedbugs/issue4316.go
Normal file
64
test/fixedbugs/issue4316.go
Normal file
@@ -0,0 +1,64 @@
|
||||
// run
|
||||
|
||||
// Copyright 2012 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.
|
||||
|
||||
// Issue 4316: the stack overflow check in the linker
|
||||
// is confused when it encounters a split-stack function
|
||||
// that needs 0 bytes of stack space.
|
||||
|
||||
package main
|
||||
|
||||
type Peano *Peano
|
||||
|
||||
func makePeano(n int) *Peano {
|
||||
if n == 0 {
|
||||
return nil
|
||||
}
|
||||
p := Peano(makePeano(n - 1))
|
||||
return &p
|
||||
}
|
||||
|
||||
var countArg Peano
|
||||
var countResult int
|
||||
|
||||
func countPeano() {
|
||||
if countArg == nil {
|
||||
countResult = 0
|
||||
return
|
||||
}
|
||||
countArg = *countArg
|
||||
countPeano()
|
||||
countResult++
|
||||
}
|
||||
|
||||
var s = "(())"
|
||||
var pT = 0
|
||||
|
||||
func p() {
|
||||
if pT >= len(s) {
|
||||
return
|
||||
}
|
||||
if s[pT] == '(' {
|
||||
pT += 1
|
||||
p()
|
||||
if pT < len(s) && s[pT] == ')' {
|
||||
pT += 1
|
||||
} else {
|
||||
return
|
||||
}
|
||||
p()
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
countArg = makePeano(4096)
|
||||
countPeano()
|
||||
if countResult != 4096 {
|
||||
println("countResult =", countResult)
|
||||
panic("countResult != 4096")
|
||||
}
|
||||
|
||||
p()
|
||||
}
|
||||
Reference in New Issue
Block a user