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