]> Cypherpunks.ru repositories - gostls13.git/blob - test/escape_level.go
all: make copyright headers consistent with one space after period
[gostls13.git] / test / escape_level.go
1 // errorcheck -0 -m -l
2
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.
6
7 // Test indirection level computation in escape analysis.
8
9 package escape
10
11 var sink interface{}
12
13 func level0() {
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"
19 }
20
21 func level1() {
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"
27 }
28
29 func level2() {
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"
35 }
36
37 func level3() {
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"
43 }
44
45 func level4() {
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"
51 }
52
53 func level5() {
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"
57         p2 := p1
58         sink = p2 // ERROR "p2 escapes to heap"
59 }
60
61 func level6() {
62         i := 0    // ERROR "moved to heap: i"
63         p0 := &i  // ERROR "&i escapes to heap"
64         p1 := &p0 // ERROR "&p0 does not escape"
65         p2 := p1
66         sink = *p2 // ERROR "\*p2 escapes to heap"
67 }
68
69 func level7() {
70         i := 0    // ERROR "moved to heap: i"
71         p0 := &i  // ERROR "&i escapes to heap"
72         p1 := &p0 // ERROR "&p0 does not escape"
73         // note *p1 == &i
74         p2 := *p1  // ERROR "moved to heap: p2"
75         sink = &p2 // ERROR "&p2 escapes to heap"
76 }
77
78 func level8() {
79         i := 0    // ERROR "moved to heap: i"
80         p0 := &i  // ERROR "&i escapes to heap"
81         p1 := &p0 // ERROR "&p0 does not escape"
82         p2 := *p1
83         sink = p2 // ERROR "p2 escapes to heap"
84 }
85
86 func level9() {
87         i := 0
88         p0 := &i  // ERROR "&i does not escape"
89         p1 := &p0 // ERROR "&p0 does not escape"
90         p2 := *p1
91         sink = *p2 // ERROR "\*p2 escapes to heap"
92 }
93
94 func level10() {
95         i := 0
96         p0 := &i // ERROR "&i does not escape"
97         p1 := *p0
98         p2 := &p1  // ERROR "&p1 does not escape"
99         sink = *p2 // ERROR "\*p2 escapes to heap"
100 }
101
102 func level11() {
103         i := 0
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"
108 }