Initial commit: Go 1.23 release state
This commit is contained in:
42
test/fixedbugs/issue16760.go
Normal file
42
test/fixedbugs/issue16760.go
Normal file
@@ -0,0 +1,42 @@
|
||||
// run
|
||||
|
||||
// Copyright 2016 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.
|
||||
|
||||
// Make sure we don't start marshaling (writing to the stack)
|
||||
// arguments until those arguments are evaluated and known
|
||||
// not to unconditionally panic. If they unconditionally panic,
|
||||
// we write some args but never do the call. That messes up
|
||||
// the logic which decides how big the argout section needs to be.
|
||||
|
||||
package main
|
||||
|
||||
type W interface {
|
||||
Write([]byte)
|
||||
}
|
||||
|
||||
type F func(W)
|
||||
|
||||
func foo(f F) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
usestack(1000)
|
||||
}
|
||||
}()
|
||||
f(nil)
|
||||
}
|
||||
|
||||
func main() {
|
||||
foo(func(w W) {
|
||||
var x []string
|
||||
w.Write([]byte(x[5]))
|
||||
})
|
||||
}
|
||||
|
||||
func usestack(n int) {
|
||||
if n == 0 {
|
||||
return
|
||||
}
|
||||
usestack(n - 1)
|
||||
}
|
||||
Reference in New Issue
Block a user