// errorcheck -0 -m -l // 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. // Test escape analysis for unique. package escape import "unique" type T string func f1(s string) unique.Handle[string] { // ERROR "s does not escape$" return unique.Make(s) } func f1a(s []byte) unique.Handle[string] { // ERROR "s does not escape$" return unique.Make(string(s)) // ERROR "string\(s\) does not escape$" } func gen[S ~string](s S) unique.Handle[S] { return unique.Make(s) } func f2(s T) unique.Handle[T] { // ERROR "s does not escape$" return unique.Make(s) } func f3(s T) unique.Handle[T] { // ERROR "s does not escape$" return gen(s) } type pair struct { s1 string s2 string } func f4(s1 string, s2 string) unique.Handle[pair] { // ERROR "s1 does not escape$" "s2 does not escape$" return unique.Make(pair{s1, s2}) } type viaInterface struct { s any } func f5(s string) unique.Handle[viaInterface] { // ERROR "leaking param: s$" return unique.Make(viaInterface{s}) // ERROR "s escapes to heap$" } var sink any func f6(s string) unique.Handle[string] { // ERROR "leaking param: s$" sink = s // ERROR "s escapes to heap$" return unique.Make(s) } func f6a(s []byte) unique.Handle[string] { // ERROR "leaking param: s$" sink = s // ERROR "s escapes to heap$" return unique.Make(string(s)) // ERROR "string\(s\) does not escape$" }