1// run
2
3// Copyright 2014 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Issue 8047. Defer setup during panic shouldn't crash for nil defer.
8
9package main
10
11func main() {
12	defer func() {
13		// This recover recovers the panic caused by the nil defer func
14		// g(). The original panic(1) was already aborted/replaced by this
15		// new panic, so when this recover is done, the program completes
16		// normally.
17		recover()
18	}()
19	f()
20}
21
22func f() {
23	var g func()
24	defer g()
25	panic(1)
26}
27