| // Test of context-sensitive treatment of certain function calls, |
| // e.g. static calls to simple accessor methods. |
| func (t *T) SetX(x *int) { t.x = x } |
| func (t *T) GetX() *int { return t.x } |
| print(t1.GetX()) // @pointsto main.a |
| print(t2.GetX()) // @pointsto main.b |
| id := func(x *int) *int { |
| print(x) // @pointsto main.a | main.b |
| print(id(&a)) // @pointsto main.a |
| print(id(&b)) // @pointsto main.b |
| // Same again, but anon func has free vars. |
| var c int // @line context2c |
| id2 := func(x *int) (*int, *int) { |
| print(x) // @pointsto main.a | main.b |
| print(p) // @pointsto main.a |
| print(q) // @pointsto c@context2c:6 |
| print(r) // @pointsto main.b |
| print(s) // @pointsto c@context2c:6 |