aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder
diff options
context:
space:
mode:
authorAlan Donovan <adonovan@google.com>2024-12-11 15:42:06 -0500
committerGopher Robot <gobot@golang.org>2025-05-19 09:13:04 -0700
commit198c3cb785282ee4c199680ec2d05381805a6f66 (patch)
tree32212e5599bc44e5bba3c178a7ce5be263acf70b /src/cmd/compile/internal/noder
parentda9c5b142c855496222f0ab167c3f1d9e98403c4 (diff)
downloadgo-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.go16
-rw-r--r--src/cmd/compile/internal/noder/writer.go2
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