1
0
mirror of https://github.com/golang/go synced 2024-09-29 10:24:34 -06:00

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>
This commit is contained in:
Ian Lance Taylor 2023-07-11 17:42:53 -07:00 committed by Gopher Robot
parent eaa8419a72
commit 88a545d844
2 changed files with 3 additions and 22 deletions

View File

@ -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()

View File

@ -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()