Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / go / pointer / testdata / context.go
1 // +build ignore
2
3 package main
4
5 // Test of context-sensitive treatment of certain function calls,
6 // e.g. static calls to simple accessor methods.
7
8 var a, b int
9
10 type T struct{ x *int }
11
12 func (t *T) SetX(x *int) { t.x = x }
13 func (t *T) GetX() *int  { return t.x }
14
15 func context1() {
16         var t1, t2 T
17         t1.SetX(&a)
18         t2.SetX(&b)
19         print(t1.GetX()) // @pointsto main.a
20         print(t2.GetX()) // @pointsto main.b
21 }
22
23 func context2() {
24         id := func(x *int) *int {
25                 print(x) // @pointsto main.a | main.b
26                 return x
27         }
28         print(id(&a)) // @pointsto main.a
29         print(id(&b)) // @pointsto main.b
30
31         // Same again, but anon func has free vars.
32         var c int // @line context2c
33         id2 := func(x *int) (*int, *int) {
34                 print(x) // @pointsto main.a | main.b
35                 return x, &c
36         }
37         p, q := id2(&a)
38         print(p) // @pointsto main.a
39         print(q) // @pointsto c@context2c:6
40         r, s := id2(&b)
41         print(r) // @pointsto main.b
42         print(s) // @pointsto c@context2c:6
43 }
44
45 func main() {
46         context1()
47         context2()
48 }