/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
go1.26.2
test/codegen/append.go
245 строк
4 KB
thepudds
cmd/compile: introduce alias analysis and automatically free non-aliased memory after growslice
27 ноя 2025, 06:04
27 ноя 2025, 06:04
4879151
Код
Авторство
О чём код?
// asmcheck //go:build !goexperiment.runtimefreegc // 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 codegen func Append1(n int) []int { var r []int for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append2(n int) (r []int) { for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return } func Append3(n int) (r []int) { for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append4(n int) []int { var r []int for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } println(cap(r)) // amd64:`.*moveSliceNoScan\b` return r } func Append5(n int) []int { var r []int for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } useSlice(r) // amd64:`.*moveSliceNoScan\b` return r } func Append5b(n int) []int { var r []int useSlice(r) for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } // amd64:`.*moveSliceNoScan\b` return r } func Append6(n int) []*int { var r []*int for i := range n { // amd64:`.*growslice\b` r = append(r, new(i)) } // amd64:`.*moveSliceNoCap\b` return r } func Append7(n int) []*int { var r []*int for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, new(i)) } println(cap(r)) // amd64:`.*moveSlice\b` return r } func Append8(n int, p *[]int) { var r []int for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` *p = r } func Append8b(n int, p *[]int) { var r []int // amd64:`.*moveSliceNoCapNoScan\b` *p = r for i := range n { // amd64:`.*growslice\b` r = append(r, i) } } func Append9(n int) []int { var r []int for i := range n { // amd64:`.*growslice\b` r = append(r, i) } println(len(r)) // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append10(n int) []int { var r []int for i := range n { // amd64:`.*growslice\b` r = append(r, i) } println(r[3]) // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append11(n int) []int { var r []int for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } r = r[3:5] // amd64:`.*moveSliceNoScan\b` return r } func Append12(n int) []int { var r []int r = nil for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append13(n int) []int { var r []int r, r = nil, nil for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append14(n int) []int { var r []int r = []int{3, 4, 5} for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } // amd64:`.*moveSliceNoScan\b` return r } func Append15(n int) []int { r := []int{3, 4, 5} for i := range n { // amd64:`.*growsliceBuf\b` r = append(r, i) } // amd64:`.*moveSliceNoScan\b` return r } func Append16(r []int, n int) []int { for i := range n { // amd64:`.*growslice\b` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append17(n int) []int { var r []int for i := range n { // amd64:`.*growslice\b` r = append(r, i) } for i, x := range r { println(i, x) } // amd64:`.*moveSliceNoCapNoScan\b` return r } func Append18(n int, p *[]int) { var r []int for i := range n { // amd64:-`.*moveSliceNoCapNoScan` *p = r // amd64:`.*growslice` r = append(r, i) } } func Append19(n int, p [][]int) { for j := range p { var r []int for i := range n { // amd64:`.*growslice` r = append(r, i) } // amd64:`.*moveSliceNoCapNoScan` p[j] = r } } func Append20(n int, p [][]int) { for j := range p { var r []int // amd64:`.*growslice` r = append(r, 0) // amd64:-`.*moveSliceNoCapNoScan` p[j] = r } } //go:noinline func useSlice(s []int) { }