blob: 9c0330d19a3b2307189f2e0d15b6141b08dc1e48 [file] [log] [blame]
// run
// Copyright 2025 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.
package main
func callRecover() {
if recover() != nil {
println("recovered")
}
}
type T int
func (*T) M() { callRecover() }
type S struct{ *T } // has a wrapper S.M wrapping (*T.M)
var p = S{new(T)}
var fn = S.M // using a function pointer to force using the wrapper
func main() {
mustPanic(func() {
defer fn(p)
panic("XXX")
})
}
func mustPanic(f func()) {
defer func() {
r := recover()
if r == nil {
panic("didn't panic")
}
}()
f()
}