7 var unknown bool // defeat dead-code elimination
10 var h int // @line f1h
11 f := func(x *int) *int {
19 g := func(x *int) *int {
26 print(g(&a)) // @pointsto main.a | main.b | h@f1h:6
27 print(f(&a)) // @pointsto main.a | main.b
28 print(&a) // @pointsto main.a
31 // @calls main.func1 -> main.func1$2
32 // @calls main.func1 -> main.func1$1
33 // @calls main.func1$2 -> main.func1$1
43 print(x) // @pointsto main.a
44 print(y) // @pointsto main.b
48 x, y := func() (x, y *int) {
56 print(x) // @pointsto main.a
57 print(y) // @pointsto main.b | main.c
60 func swap(x, y *int) (*int, *int) { // @line swap
61 print(&x) // @pointsto x@swap:11
62 print(x) // @pointsto makeslice[*]@func4make:11
63 print(&y) // @pointsto y@swap:14
64 print(y) // @pointsto j@f4j:5
69 a := make([]int, 10) // @line func4make
70 i, j := 123, 456 // @line f4j
72 p, q := swap(&a[3], &j)
73 print(p) // @pointsto j@f4j:5
74 print(q) // @pointsto makeslice[*]@func4make:11
77 print(f) // @pointsto main.b
82 func (t *T) f(x *int) *int {
83 print(t) // @pointsto main.a
84 print(x) // @pointsto main.c
88 func (t *T) g(x *int) *int {
89 print(t) // @pointsto main.a
90 print(x) // @pointsto main.b
94 func (t *T) h(x *int) *int {
95 print(t) // @pointsto main.a
96 print(x) // @pointsto main.b
100 var h func(*T, *int) *int
103 // Static call of method.
105 print(t.f(&c)) // @pointsto main.b
107 // Static call of method as function
108 print((*T).g(t, &b)) // @pointsto main.c
110 // Dynamic call (not invoke) of method.
112 print(h(t, &b)) // @pointsto main.c
115 // @calls main.func5 -> (*main.T).f
116 // @calls main.func5 -> (*main.T).g$thunk
117 // @calls main.func5 -> (*main.T).h$thunk
122 return A // (free variable)
124 print(f()) // @pointsto main.a
127 // @calls main.func6 -> main.func6$1
139 imethodClosure := i.f
141 // @calls main.func7 -> (main.I).f$bound
142 // @calls (main.I).f$bound -> (main.D).f
145 cmethodClosure := d.f
147 // @calls main.func7 -> (main.D).f$bound
148 // @calls (main.D).f$bound ->(main.D).f
152 // @calls main.func7 -> (main.D).f$thunk
155 func func8(x ...int) {
156 print(&x[0]) // @pointsto varargs[*]@varargs:15
160 x1, x2, x3, x4, x5 *int
166 // Regression test for bug reported by Jon Valdes on golang-dev, Jun 19 2014.
167 // The receiver of a bound method closure may be of a multi-node type, E.
168 // valueNode was reserving only a single node for it, so the
169 // nodes used by the immediately following constraints
170 // (e.g. param 'i') would get clobbered.
179 _ = e.f // form a closure---must reserve sizeof(E) nodes
182 i.f() // must not crash the solver
185 print(e.x1) // @pointsto main.a
186 print(e.x2) // @pointsto main.a
187 print(e.x3) // @pointsto main.a
188 print(e.x4) // @pointsto main.a
189 print(e.x5) // @pointsto main.a
200 func8(1, 2, 3) // @line varargs
204 // @calls <root> -> main.main
205 // @calls <root> -> main.init