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 escape analysis for slices.
15 // BAD: i should not escape
16 i := 0 // ERROR "moved to heap: i"
17 s = append(s, &i) // ERROR "&i escapes to heap"
23 i := 0 // ERROR "moved to heap: i"
24 s = append(s, &i) // ERROR "&i escapes to heap"
28 func slice2() []*int {
30 i := 0 // ERROR "moved to heap: i"
31 s = append(s, &i) // ERROR "&i escapes to heap"
37 i := 0 // ERROR "moved to heap: i"
38 s = append(s, &i) // ERROR "&i escapes to heap"
45 func slice4(s []*int) { // ERROR "s does not escape"
46 i := 0 // ERROR "moved to heap: i"
47 s[0] = &i // ERROR "&i escapes to heap"
50 func slice5(s []*int) { // ERROR "s does not escape"
52 s = make([]*int, 10) // ERROR "make\(\[\]\*int, 10\) does not escape"
54 i := 0 // ERROR "moved to heap: i"
55 s[0] = &i // ERROR "&i escapes to heap"
59 s := make([]*int, 10) // ERROR "make\(\[\]\*int, 10\) does not escape"
60 // BAD: i should not escape
61 i := 0 // ERROR "moved to heap: i"
62 s[0] = &i // ERROR "&i escapes to heap"
67 s := make([]*int, 10) // ERROR "make\(\[\]\*int, 10\) does not escape"
68 i := 0 // ERROR "moved to heap: i"
69 s[0] = &i // ERROR "&i escapes to heap"
74 // BAD: i should not escape here
75 i := 0 // ERROR "moved to heap: i"
76 s := []*int{&i} // ERROR "&i escapes to heap" "literal does not escape"
81 i := 0 // ERROR "moved to heap: i"
82 s := []*int{&i} // ERROR "&i escapes to heap" "literal does not escape"
86 func slice10() []*int {
87 i := 0 // ERROR "moved to heap: i"
88 s := []*int{&i} // ERROR "&i escapes to heap" "literal escapes to heap"