1// run 2 3// Copyright 2019 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// Check that deferring a nil function causes a proper 8// panic when the deferred function is invoked (not 9// when the function is deferred). 10// See Issue #8047 and #34926. 11 12package main 13 14var x = 0 15 16func main() { 17 defer func() { 18 err := recover() 19 if err == nil { 20 panic("did not panic") 21 } 22 if x != 1 { 23 panic("FAIL") 24 } 25 }() 26 f() 27} 28 29func f() { 30 var nilf func() 31 defer nilf() 32 x = 1 33} 34