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

     1  // run
     2  
     3  // Copyright 2017 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  import (
    10  	"os"
    11  	"runtime"
    12  )
    13  
    14  func foo(x int) int {
    15  	return x + 1
    16  }
    17  
    18  func test() {
    19  	defer func() {
    20  		if r := recover(); r != nil {
    21  			pcs := make([]uintptr, 10)
    22  			n := runtime.Callers(0, pcs)
    23  			pcs = pcs[:n]
    24  			frames := runtime.CallersFrames(pcs)
    25  			for {
    26  				f, more := frames.Next()
    27  				if f.Function == "main.foo" {
    28  					println("did not expect to see call to foo in stack trace")
    29  					os.Exit(1)
    30  				}
    31  				if !more {
    32  					break
    33  				}
    34  			}
    35  		}
    36  	}()
    37  	var v []int
    38  	foo(v[0])
    39  }
    40  
    41  func bar(x ...int) int {
    42  	return x[0] + 1
    43  }
    44  
    45  func testVariadic() {
    46  	defer func() {
    47  		if r := recover(); r != nil {
    48  			pcs := make([]uintptr, 10)
    49  			n := runtime.Callers(0, pcs)
    50  			pcs = pcs[:n]
    51  			frames := runtime.CallersFrames(pcs)
    52  			for {
    53  				f, more := frames.Next()
    54  				if f.Function == "main.bar" {
    55  					println("did not expect to see call to bar in stack trace")
    56  					os.Exit(1)
    57  				}
    58  				if !more {
    59  					break
    60  				}
    61  			}
    62  		}
    63  	}()
    64  	var v []int
    65  	bar(v[0])
    66  }
    67  
    68  func main() {
    69  	test()
    70  	testVariadic()
    71  }