modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue8047.go (about)

     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.  Stack copier shouldn't crash if there
     8  // is a nil defer.
     9  
    10  package main
    11  
    12  func stackit(n int) {
    13  	if n == 0 {
    14  		return
    15  	}
    16  	stackit(n - 1)
    17  }
    18  
    19  func main() {
    20  	defer func() {
    21  		// catch & ignore panic from nil defer below
    22  		err := recover()
    23  		if err == nil {
    24  			panic("defer of nil func didn't panic")
    25  		}
    26  	}()
    27  	defer ((func())(nil))()
    28  	stackit(1000)
    29  }