...
1 package main
2
3
4
5 import "fmt"
6
7 func deferMutatesResults(noArgReturn bool) (a, b int) {
8 defer func() {
9 if a != 1 || b != 2 {
10 panic(fmt.Sprint(a, b))
11 }
12 a, b = 3, 4
13 }()
14 if noArgReturn {
15 a, b = 1, 2
16 return
17 }
18 return 1, 2
19 }
20
21 func init() {
22 a, b := deferMutatesResults(true)
23 if a != 3 || b != 4 {
24 panic(fmt.Sprint(a, b))
25 }
26 a, b = deferMutatesResults(false)
27 if a != 3 || b != 4 {
28 panic(fmt.Sprint(a, b))
29 }
30 }
31
32
33
34 var deferCount = 0
35
36 func init() {
37 deferCount = 1
38 defer func() {
39 deferCount++
40 }()
41
42 }
43
44 func init() {
45
46
47 if deferCount != 2 {
48 panic(deferCount)
49 }
50 }
51
52 func main() {
53 }
54
View as plain text