aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/coverage
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2023-07-11 17:42:53 -0700
committerGopher Robot <gobot@golang.org>2023-07-18 19:53:46 +0000
commit88a545d84438803714fa91f2c93057a3246bd58c (patch)
tree00f001436be8e01cc165bf5e548e58f26161417d /src/runtime/coverage
parenteaa8419a72215b53576ab5d2def399f9503d1f58 (diff)
downloadgo-88a545d84438803714fa91f2c93057a3246bd58c.tar.xz
runtime/coverage: use unsafe.Slice, not reflect.SliceHeader
Change-Id: I59c4757df83c12b4c8b85cdd523552c5e5e7bf95 Reviewed-on: https://go-review.googlesource.com/c/go/+/508977 Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/runtime/coverage')
-rw-r--r--src/runtime/coverage/apis.go8
-rw-r--r--src/runtime/coverage/emit.go17
2 files changed, 3 insertions, 22 deletions
diff --git a/src/runtime/coverage/apis.go b/src/runtime/coverage/apis.go
index 05da345ede..15ba04a86f 100644
--- a/src/runtime/coverage/apis.go
+++ b/src/runtime/coverage/apis.go
@@ -8,7 +8,6 @@ import (
"fmt"
"internal/coverage"
"io"
- "reflect"
"sync/atomic"
"unsafe"
)
@@ -158,13 +157,8 @@ func ClearCounters() error {
// inconsistency when reading the counter array from the thread
// running ClearCounters.
- var sd []atomic.Uint32
-
- bufHdr := (*reflect.SliceHeader)(unsafe.Pointer(&sd))
for _, c := range cl {
- bufHdr.Data = uintptr(unsafe.Pointer(c.Counters))
- bufHdr.Len = int(c.Len)
- bufHdr.Cap = int(c.Len)
+ sd := unsafe.Slice((*atomic.Uint32)(unsafe.Pointer(c.Counters)), int(c.Len))
for i := 0; i < len(sd); i++ {
// Skip ahead until the next non-zero value.
sdi := sd[i].Load()
diff --git a/src/runtime/coverage/emit.go b/src/runtime/coverage/emit.go
index bb0c6fb6a2..d18e69053d 100644
--- a/src/runtime/coverage/emit.go
+++ b/src/runtime/coverage/emit.go
@@ -14,7 +14,6 @@ import (
"io"
"os"
"path/filepath"
- "reflect"
"runtime"
"strconv"
"sync/atomic"
@@ -447,26 +446,16 @@ func (s *emitState) needMetaDataFile() bool {
func writeMetaData(w io.Writer, metalist []rtcov.CovMetaBlob, cmode coverage.CounterMode, gran coverage.CounterGranularity, finalHash [16]byte) error {
mfw := encodemeta.NewCoverageMetaFileWriter("<io.Writer>", w)
- // Note: "sd" is re-initialized on each iteration of the loop
- // below, and would normally be declared inside the loop, but
- // placed here escape analysis since we capture it in bufHdr.
- var sd []byte
- bufHdr := (*reflect.SliceHeader)(unsafe.Pointer(&sd))
-
var blobs [][]byte
for _, e := range metalist {
- bufHdr.Data = uintptr(unsafe.Pointer(e.P))
- bufHdr.Len = int(e.Len)
- bufHdr.Cap = int(e.Len)
+ sd := unsafe.Slice(e.P, int(e.Len))
blobs = append(blobs, sd)
}
return mfw.Write(finalHash, blobs, cmode, gran)
}
func (s *emitState) VisitFuncs(f encodecounter.CounterVisitorFn) error {
- var sd []atomic.Uint32
var tcounters []uint32
- bufHdr := (*reflect.SliceHeader)(unsafe.Pointer(&sd))
rdCounters := func(actrs []atomic.Uint32, ctrs []uint32) []uint32 {
ctrs = ctrs[:0]
@@ -478,9 +467,7 @@ func (s *emitState) VisitFuncs(f encodecounter.CounterVisitorFn) error {
dpkg := uint32(0)
for _, c := range s.counterlist {
- bufHdr.Data = uintptr(unsafe.Pointer(c.Counters))
- bufHdr.Len = int(c.Len)
- bufHdr.Cap = int(c.Len)
+ sd := unsafe.Slice((*atomic.Uint32)(unsafe.Pointer(c.Counters)), int(c.Len))
for i := 0; i < len(sd); i++ {
// Skip ahead until the next non-zero value.
sdi := sd[i].Load()