From a74ae952826fd65006a8190c50bbbee4c4869cf9 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Mon, 19 May 2025 13:05:24 -0400 Subject: strings,bytes: add internal docs about perennial noCopy questions Updates #26462 Updates #25907 Updates #47276 Updates #48398 Change-Id: Ic64fc8d0c284f6e5aa383a8d417fa5768dcd7925 Reviewed-on: https://go-review.googlesource.com/c/go/+/674096 Auto-Submit: Alan Donovan LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/strings/builder.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/strings') diff --git a/src/strings/builder.go b/src/strings/builder.go index e6df08c6f4..7ecef3176b 100644 --- a/src/strings/builder.go +++ b/src/strings/builder.go @@ -23,6 +23,12 @@ type Builder struct { buf []byte } +// copyCheck implements a dynamic check to prevent modification after +// copying a non-zero Builder, which would be unsafe (see #25907, #47276). +// +// We cannot add a noCopy field to Builder, to cause vet's copylocks +// check to report copying, because copylocks cannot reliably +// discriminate the zero and nonzero cases. func (b *Builder) copyCheck() { if b.addr == nil { // This hack works around a failing of Go's escape analysis -- cgit v1.3-5-g9baa