From 198c3cb785282ee4c199680ec2d05381805a6f66 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Wed, 11 Dec 2024 15:42:06 -0500 Subject: std: pass bytes.Buffer and strings.Builder by pointer This CL fixes a number of (all true positive) findings of vet's copylock analyzer patched to treat the Bu{ff,uild}er types as non-copyable after first use. This does require imposing an additional indirection between noder.writer and Encoder since the field is embedded by value but its constructor now returns a pointer. Updates golang/go#25907 Updates golang/go#47276 Change-Id: I0b4d77ac12bcecadf06a91709e695365da10766c Reviewed-on: https://go-review.googlesource.com/c/go/+/635339 Reviewed-by: Robert Findley Commit-Queue: Alan Donovan LUCI-TryBot-Result: Go LUCI Auto-Submit: Alan Donovan --- src/cmd/compile/internal/noder/linker.go | 16 ++++++++-------- src/cmd/compile/internal/noder/writer.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/cmd/compile/internal/noder') diff --git a/src/cmd/compile/internal/noder/linker.go b/src/cmd/compile/internal/noder/linker.go index 3e60e99850..6ee29a205b 100644 --- a/src/cmd/compile/internal/noder/linker.go +++ b/src/cmd/compile/internal/noder/linker.go @@ -84,7 +84,7 @@ func (l *linker) relocIdx(pr *pkgReader, k pkgbits.SectionKind, idx index) index // if we do external relocations. w := l.pw.NewEncoderRaw(k) - l.relocCommon(pr, &w, k, idx) + l.relocCommon(pr, w, k, idx) newidx = w.Idx } @@ -168,9 +168,9 @@ func (l *linker) relocObj(pr *pkgReader, idx index) index { assert(wname.Idx == w.Idx) assert(wdict.Idx == w.Idx) - l.relocCommon(pr, &w, pkgbits.SectionObj, idx) - l.relocCommon(pr, &wname, pkgbits.SectionName, idx) - l.relocCommon(pr, &wdict, pkgbits.SectionObjDict, idx) + l.relocCommon(pr, w, pkgbits.SectionObj, idx) + l.relocCommon(pr, wname, pkgbits.SectionName, idx) + l.relocCommon(pr, wdict, pkgbits.SectionObjDict, idx) // Generic types and functions won't have definitions, and imported // objects may not either. @@ -181,15 +181,15 @@ func (l *linker) relocObj(pr *pkgReader, idx index) index { wext.Sync(pkgbits.SyncObject1) switch tag { case pkgbits.ObjFunc: - l.relocFuncExt(&wext, obj) + l.relocFuncExt(wext, obj) case pkgbits.ObjType: - l.relocTypeExt(&wext, obj) + l.relocTypeExt(wext, obj) case pkgbits.ObjVar: - l.relocVarExt(&wext, obj) + l.relocVarExt(wext, obj) } wext.Flush() } else { - l.relocCommon(pr, &wext, pkgbits.SectionObjExt, idx) + l.relocCommon(pr, wext, pkgbits.SectionObjExt, idx) } // Check if we need to export the inline bodies for functions and diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 60a13108bc..dd79c3ef4c 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -174,7 +174,7 @@ func (pw *pkgWriter) typeOf(expr syntax.Expr) types2.Type { type writer struct { p *pkgWriter - pkgbits.Encoder + *pkgbits.Encoder // sig holds the signature for the current function body, if any. sig *types2.Signature -- cgit v1.3-5-g9baa