Source file test/fixedbugs/issue15975.go
1 // run 2 3 // Copyright 2016 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 package main 8 9 var fail bool 10 11 type Closer interface { 12 Close() 13 } 14 15 func nilInterfaceDeferCall() { 16 var x Closer 17 defer x.Close() 18 // if it panics when evaluating x.Close, it should not reach here 19 fail = true 20 } 21 22 func shouldPanic(f func()) { 23 defer func() { 24 if recover() == nil { 25 panic("did not panic") 26 } 27 }() 28 f() 29 } 30 31 func main() { 32 shouldPanic(nilInterfaceDeferCall) 33 if fail { 34 panic("fail") 35 } 36 } 37