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

     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  import "fmt"
    10  
    11  func f1() (x int) {
    12  	for {
    13  		defer func() {
    14  			recover()
    15  			x = 1
    16  		}()
    17  		panic(nil)
    18  	}
    19  }
    20  
    21  var sink *int
    22  
    23  func f2() (x int) {
    24  	sink = &x
    25  	defer func() {
    26  		recover()
    27  		x = 1
    28  	}()
    29  	panic(nil)
    30  }
    31  
    32  func f3(b bool) (x int) {
    33  	sink = &x
    34  	defer func() {
    35  		recover()
    36  		x = 1
    37  	}()
    38  	if b {
    39  		panic(nil)
    40  	}
    41  	return
    42  }
    43  
    44  func main() {
    45  	if x := f1(); x != 1 {
    46  		panic(fmt.Sprintf("f1 returned %d, wanted 1", x))
    47  	}
    48  	if x := f2(); x != 1 {
    49  		panic(fmt.Sprintf("f2 returned %d, wanted 1", x))
    50  	}
    51  	if x := f3(true); x != 1 {
    52  		panic(fmt.Sprintf("f3(true) returned %d, wanted 1", x))
    53  	}
    54  	if x := f3(false); x != 1 {
    55  		panic(fmt.Sprintf("f3(false) returned %d, wanted 1", x))
    56  	}
    57  }