Update to go1.25.0
This commit is contained in:
108
test/escape_make_non_const.go
Normal file
108
test/escape_make_non_const.go
Normal file
@@ -0,0 +1,108 @@
|
||||
// errorcheck -0 -m
|
||||
|
||||
// Copyright 2025 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package escape
|
||||
|
||||
const globalConstSize = 128
|
||||
|
||||
var globalVarSize = 128
|
||||
|
||||
//go:noinline
|
||||
func testSlices() {
|
||||
{
|
||||
size := 128
|
||||
_ = make([]byte, size) // ERROR "make\(\[\]byte, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
s := 128
|
||||
size := s
|
||||
_ = make([]byte, size) // ERROR "make\(\[\]byte, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
size := 128
|
||||
_ = make([]byte, size) // ERROR "make\(\[\]byte, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
s := 128
|
||||
size := s
|
||||
_ = make([]byte, size) // ERROR "make\(\[\]byte, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
s1 := 128
|
||||
s2 := 256
|
||||
_ = make([]byte, s2, s1) // ERROR "make\(\[\]byte, s2, 128\) does not escape"
|
||||
}
|
||||
|
||||
allocLen(256) // ERROR "make\(\[\]byte, 256\) does not escape" "inlining call"
|
||||
allocCap(256) // ERROR "make\(\[\]byte, 0, 256\) does not escape" "inlining call"
|
||||
_ = newT(256) // ERROR "make\(\[\]byte, 256\) does not escape" "inlining call"
|
||||
|
||||
{
|
||||
size := globalConstSize
|
||||
_ = make([]byte, size) // ERROR "make\(\[\]byte, 128\) does not escape"
|
||||
}
|
||||
|
||||
allocLen(globalConstSize) // ERROR "make\(\[\]byte, 128\) does not escape" "inlining call"
|
||||
allocCap(globalConstSize) // ERROR "make\(\[\]byte, 0, 128\) does not escape" "inlining call"
|
||||
_ = newT(globalConstSize) // ERROR "make\(\[\]byte, 128\) does not escape" "inlining call"
|
||||
|
||||
{
|
||||
c := 128
|
||||
s := 256
|
||||
_ = make([]byte, s, c) // ERROR "make\(\[\]byte, s, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
s := 256
|
||||
_ = make([]byte, s, globalConstSize) // ERROR "make\(\[\]byte, s, 128\) does not escape"
|
||||
}
|
||||
|
||||
{
|
||||
_ = make([]byte, globalVarSize) // ERROR "make\(\[\]byte, globalVarSize\) does not escape"
|
||||
_ = make([]byte, globalVarSize, globalConstSize) // ERROR "make\(\[\]byte, globalVarSize, 128\) does not escape"
|
||||
}
|
||||
}
|
||||
|
||||
func allocLen(l int) []byte { // ERROR "can inline"
|
||||
return make([]byte, l) // ERROR "escapes to heap"
|
||||
}
|
||||
|
||||
func allocCap(l int) []byte { // ERROR "can inline"
|
||||
return make([]byte, 0, l) // ERROR "escapes to heap"
|
||||
}
|
||||
|
||||
type t struct {
|
||||
s []byte
|
||||
}
|
||||
|
||||
func newT(l int) t { // ERROR "can inline"
|
||||
return t{make([]byte, l)} // ERROR "make.*escapes to heap"
|
||||
}
|
||||
|
||||
//go:noinline
|
||||
func testMaps() {
|
||||
size := 128
|
||||
_ = make(map[string]int, size) // ERROR "does not escape"
|
||||
|
||||
_ = allocMapLen(128) // ERROR "does not escape" "inlining call"
|
||||
_ = newM(128) // ERROR "does not escape" "inlining call"
|
||||
}
|
||||
|
||||
func allocMapLen(l int) map[string]int { // ERROR "can inline"
|
||||
return make(map[string]int, l) // ERROR "escapes to heap"
|
||||
}
|
||||
|
||||
type m struct {
|
||||
m map[string]int
|
||||
}
|
||||
|
||||
func newM(l int) m { // ERROR "can inline"
|
||||
return m{make(map[string]int, l)} // ERROR "make.*escapes to heap"
|
||||
}
|
||||
Reference in New Issue
Block a user