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