3 // Copyright 2015 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
7 // Test indirection level computation in escape analysis.
14 i := 0 // ERROR "moved to heap: i"
15 p0 := &i // ERROR "moved to heap: p0" "&i escapes to heap"
16 p1 := &p0 // ERROR "moved to heap: p1" "&p0 escapes to heap"
17 p2 := &p1 // ERROR "moved to heap: p2" "&p1 escapes to heap"
18 sink = &p2 // ERROR "&p2 escapes to heap"
22 i := 0 // ERROR "moved to heap: i"
23 p0 := &i // ERROR "moved to heap: p0" "&i escapes to heap"
24 p1 := &p0 // ERROR "moved to heap: p1" "&p0 escapes to heap"
25 p2 := &p1 // ERROR "&p1 escapes to heap"
26 sink = p2 // ERROR "p2 escapes to heap"
30 i := 0 // ERROR "moved to heap: i"
31 p0 := &i // ERROR "moved to heap: p0" "&i escapes to heap"
32 p1 := &p0 // ERROR "&p0 escapes to heap"
33 p2 := &p1 // ERROR "&p1 does not escape"
34 sink = *p2 // ERROR "\*p2 escapes to heap"
38 i := 0 // ERROR "moved to heap: i"
39 p0 := &i // ERROR "&i escapes to heap"
40 p1 := &p0 // ERROR "&p0 does not escape"
41 p2 := &p1 // ERROR "&p1 does not escape"
42 sink = **p2 // ERROR "\* \(\*p2\) escapes to heap"
46 i := 0 // ERROR "moved to heap: i"
47 p0 := &i // ERROR "moved to heap: p0" "&i escapes to heap"
48 p1 := &p0 // ERROR "&p0 escapes to heap"
49 p2 := p1 // ERROR "moved to heap: p2"
50 sink = &p2 // ERROR "&p2 escapes to heap"
54 i := 0 // ERROR "moved to heap: i"
55 p0 := &i // ERROR "moved to heap: p0" "&i escapes to heap"
56 p1 := &p0 // ERROR "&p0 escapes to heap"
58 sink = p2 // ERROR "p2 escapes to heap"
62 i := 0 // ERROR "moved to heap: i"
63 p0 := &i // ERROR "&i escapes to heap"
64 p1 := &p0 // ERROR "&p0 does not escape"
66 sink = *p2 // ERROR "\*p2 escapes to heap"
70 i := 0 // ERROR "moved to heap: i"
71 p0 := &i // ERROR "&i escapes to heap"
72 p1 := &p0 // ERROR "&p0 does not escape"
74 p2 := *p1 // ERROR "moved to heap: p2"
75 sink = &p2 // ERROR "&p2 escapes to heap"
79 i := 0 // ERROR "moved to heap: i"
80 p0 := &i // ERROR "&i escapes to heap"
81 p1 := &p0 // ERROR "&p0 does not escape"
83 sink = p2 // ERROR "p2 escapes to heap"
88 p0 := &i // ERROR "&i does not escape"
89 p1 := &p0 // ERROR "&p0 does not escape"
91 sink = *p2 // ERROR "\*p2 escapes to heap"
96 p0 := &i // ERROR "&i does not escape"
98 p2 := &p1 // ERROR "&p1 does not escape"
99 sink = *p2 // ERROR "\*p2 escapes to heap"
104 p0 := &i // ERROR "&i does not escape"
105 p1 := &p0 // ERROR "&p0 does not escape"
106 p2 := **p1 // ERROR "moved to heap: p2"
107 sink = &p2 // ERROR "&p2 escapes to heap"