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 }