Source file
test/fixedbugs/issue14725.go
1
2
3
4
5
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 }
58
View as plain text