1 | package F1 |
---|---|
2 | |
3 | import "sync" |
4 | |
5 | func example(n int) { |
6 | var x struct { |
7 | mutex sync.RWMutex |
8 | } |
9 | |
10 | var y struct { |
11 | sync.RWMutex |
12 | } |
13 | |
14 | type l struct { |
15 | sync.RWMutex |
16 | } |
17 | |
18 | var z struct { |
19 | l |
20 | } |
21 | |
22 | var a struct { |
23 | *l |
24 | } |
25 | |
26 | var b struct{ Lock func() } |
27 | |
28 | // Match |
29 | x.mutex.Lock() |
30 | |
31 | // Match |
32 | y.Lock() |
33 | |
34 | // Match indirect |
35 | z.Lock() |
36 | |
37 | // Should be no match however currently matches due to: |
38 | // https://golang.org/issue/8584 |
39 | // Will start failing when this is fixed then just change golden to |
40 | // No match pointer indirect |
41 | // a.Lock() |
42 | a.Lock() |
43 | |
44 | // No match |
45 | b.Lock() |
46 | } |
47 |