...
Run Format

Source file test/fixedbugs/issue4316.go

Documentation: test/fixedbugs

  // 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()
  }
  

View as plain text