diff options
| author | Alan Donovan <adonovan@google.com> | 2024-12-11 15:42:06 -0500 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-05-19 09:13:04 -0700 |
| commit | 198c3cb785282ee4c199680ec2d05381805a6f66 (patch) | |
| tree | 32212e5599bc44e5bba3c178a7ce5be263acf70b /src/cmd/compile/internal/noder | |
| parent | da9c5b142c855496222f0ab167c3f1d9e98403c4 (diff) | |
| download | go-198c3cb785282ee4c199680ec2d05381805a6f66.tar.xz | |
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 <rfindley@google.com>
Commit-Queue: Alan Donovan <adonovan@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Alan Donovan <adonovan@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder')
| -rw-r--r-- | src/cmd/compile/internal/noder/linker.go | 16 | ||||
| -rw-r--r-- | src/cmd/compile/internal/noder/writer.go | 2 |
2 files changed, 9 insertions, 9 deletions
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 |
