/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/escape_struct_return.go
74 строки
1 KB
Matthew Dempsky
[dev.typeparams] cmd/compile: simplify ~r/~b naming
27 май 2021, 02:50
27 май 2021, 02:50
e99e9a6
Код
Авторство
О чём код?
// errorcheck -0 -m -l // Copyright 2015 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. // Test escape analysis for function parameters. package foo var Ssink *string type U struct { _sp *string _spp **string } func A(sp *string, spp **string) U { // ERROR "leaking param: sp to result ~r0 level=0$" "leaking param: spp to result ~r0 level=0$" return U{sp, spp} } func B(spp **string) U { // ERROR "leaking param: spp to result ~r0 level=0$" return U{*spp, spp} } func tA1() { s := "cat" sp := &s spp := &sp u := A(sp, spp) _ = u println(s) } func tA2() { s := "cat" sp := &s spp := &sp u := A(sp, spp) println(*u._sp) } func tA3() { s := "cat" sp := &s spp := &sp u := A(sp, spp) println(**u._spp) } func tB1() { s := "cat" sp := &s spp := &sp u := B(spp) _ = u println(s) } func tB2() { s := "cat" sp := &s spp := &sp u := B(spp) println(*u._sp) } func tB3() { s := "cat" sp := &s spp := &sp u := B(spp) println(**u._spp) }