+++ /dev/null
-// +build ignore
-
-package main
-
-// Test of context-sensitive treatment of certain function calls,
-// e.g. static calls to simple accessor methods.
-
-var a, b int
-
-type T struct{ x *int }
-
-func (t *T) SetX(x *int) { t.x = x }
-func (t *T) GetX() *int { return t.x }
-
-func context1() {
- var t1, t2 T
- t1.SetX(&a)
- t2.SetX(&b)
- print(t1.GetX()) // @pointsto main.a
- print(t2.GetX()) // @pointsto main.b
-}
-
-func context2() {
- id := func(x *int) *int {
- print(x) // @pointsto main.a | main.b
- return x
- }
- 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
- return x, &c
- }
- p, q := id2(&a)
- print(p) // @pointsto main.a
- print(q) // @pointsto c@context2c:6
- r, s := id2(&b)
- print(r) // @pointsto main.b
- print(s) // @pointsto c@context2c:6
-}
-
-func main() {
- context1()
- context2()
-}