Initial commit: Go 1.23 release state
This commit is contained in:
44
test/fixedbugs/issue51401.go
Normal file
44
test/fixedbugs/issue51401.go
Normal file
@@ -0,0 +1,44 @@
|
||||
// run
|
||||
|
||||
// Copyright 2022 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 51401: bad inline info in generated interface method wrapper
|
||||
// causes infinite loop in stack unwinding.
|
||||
|
||||
package main
|
||||
|
||||
import "runtime"
|
||||
|
||||
type Outer interface{ Inner }
|
||||
|
||||
type impl struct{}
|
||||
|
||||
func New() Outer { return &impl{} }
|
||||
|
||||
type Inner interface {
|
||||
DoStuff() error
|
||||
}
|
||||
|
||||
func (a *impl) DoStuff() error {
|
||||
return newError()
|
||||
}
|
||||
|
||||
func newError() error {
|
||||
stack := make([]uintptr, 50)
|
||||
runtime.Callers(2, stack[:])
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
funcs := listFuncs(New())
|
||||
for _, f := range funcs {
|
||||
f()
|
||||
}
|
||||
}
|
||||
|
||||
func listFuncs(outer Outer) []func() error {
|
||||
return []func() error{outer.DoStuff}
|
||||
}
|
||||
Reference in New Issue
Block a user