// run // Copyright 2016 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 var fail bool type Closer interface { Close() } func nilInterfaceDeferCall() { var x Closer defer x.Close() // if it panics when evaluating x.Close, it should not reach here fail = true } func shouldPanic(f func()) { defer func() { if recover() == nil { panic("did not panic") } }() f() } func main() { shouldPanic(nilInterfaceDeferCall) if fail { panic("fail") } }