diff options
| author | Russ Cox <rsc@golang.org> | 2025-11-03 15:35:26 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2025-11-03 16:37:04 -0800 |
| commit | e2c6a2024c9bdd56786feef42a2e2c5c5adeced2 (patch) | |
| tree | b88583fe99d40ef0928dbef97c2b4ed378a22311 /src | |
| parent | c93cc603cd5c731d00dc019c94490edca6160841 (diff) | |
| download | go-e2c6a2024c9bdd56786feef42a2e2c5c5adeced2.tar.xz | |
runtime: avoid append in printint, printuint
Should make cmd/link/internal/ld.TestAbstractOriginSanity happier.
Change-Id: I121927d42e527ff23d996e7387066f149b11cc59
Reviewed-on: https://go-review.googlesource.com/c/go/+/717480
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/internal/strconv/itoa.go | 8 | ||||
| -rw-r--r-- | src/runtime/print.go | 23 |
2 files changed, 29 insertions, 2 deletions
diff --git a/src/internal/strconv/itoa.go b/src/internal/strconv/itoa.go index d06de4770f..2375e034f5 100644 --- a/src/internal/strconv/itoa.go +++ b/src/internal/strconv/itoa.go @@ -174,6 +174,14 @@ func small(i int) string { return smalls[i*2 : i*2+2] } +// RuntimeFormatBase10 formats u into the tail of a +// and returns the offset to the first byte written to a. +// It is only for use by package runtime. +// Other packages should use AppendUint. +func RuntimeFormatBase10(a []byte, u uint64) int { + return formatBase10(a, u) +} + // formatBase10 formats the decimal representation of u into the tail of a // and returns the offset of the first byte written to a. That is, after // diff --git a/src/runtime/print.go b/src/runtime/print.go index e32ecb9450..c01db9d7f9 100644 --- a/src/runtime/print.go +++ b/src/runtime/print.go @@ -140,13 +140,32 @@ func printcomplex64(c complex64) { } func printuint(v uint64) { + // Note: Avoiding strconv.AppendUint so that it's clearer + // that there are no allocations in this routine. + // cmd/link/internal/ld.TestAbstractOriginSanity + // sees the append and doesn't realize it doesn't allocate. var buf [20]byte - gwrite(strconv.AppendUint(buf[:0], v, 10)) + i := strconv.RuntimeFormatBase10(buf[:], v) + gwrite(buf[i:]) } func printint(v int64) { + // Note: Avoiding strconv.AppendUint so that it's clearer + // that there are no allocations in this routine. + // cmd/link/internal/ld.TestAbstractOriginSanity + // sees the append and doesn't realize it doesn't allocate. + neg := v < 0 + u := uint64(v) + if neg { + u = -u + } var buf [20]byte - gwrite(strconv.AppendInt(buf[:0], v, 10)) + i := strconv.RuntimeFormatBase10(buf[:], u) + if neg { + i-- + buf[i] = '-' + } + gwrite(buf[i:]) } var minhexdigits = 0 // protected by printlock |
