Source file
test/fixedbugs/issue23837.go
1
2
3
4
5
6
7 package main
8
9
10 func f(p, q *struct{}) bool {
11 return *p == *q
12 }
13
14 type T struct {
15 x struct{}
16 y int
17 }
18
19
20 func g(p, q *T) bool {
21 return p.x == q.x
22 }
23
24
25 func h(p, q func() struct{}) bool {
26 return p() == q()
27 }
28
29 func fi(p, q *struct{}) bool {
30 return *p == *q
31 }
32
33 func gi(p, q *T) bool {
34 return p.x == q.x
35 }
36
37 func hi(p, q func() struct{}) bool {
38 return p() == q()
39 }
40
41 func main() {
42 shouldPanic(func() { f(nil, nil) })
43 shouldPanic(func() { g(nil, nil) })
44 shouldPanic(func() { h(nil, nil) })
45 shouldPanic(func() { fi(nil, nil) })
46 shouldPanic(func() { gi(nil, nil) })
47 shouldPanic(func() { hi(nil, nil) })
48 n := 0
49 inc := func() struct{} {
50 n++
51 return struct{}{}
52 }
53 h(inc, inc)
54 if n != 2 {
55 panic("inc not called")
56 }
57 hi(inc, inc)
58 if n != 4 {
59 panic("inc not called")
60 }
61 }
62
63 func shouldPanic(x func()) {
64 defer func() {
65 if recover() == nil {
66 panic("did not panic")
67 }
68 }()
69 x()
70 }
71
View as plain text