// run // Copyright 2014 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 8047. Defer setup during panic shouldn't crash for nil defer. package main func main() { defer func() { // This recover recovers the panic caused by the nil defer func // g(). The original panic(1) was already aborted/replaced by this // new panic, so when this recover is done, the program completes // normally. recover() }() f() } func f() { var g func() defer g() panic(1) }