mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: clean up escaping in tests
There are several tests in the runtime that need to force various things to escape to the heap. This CL centralizes this functionality into runtime.Escape, defined in export_test. Change-Id: I2de2519661603ad46c372877a9c93efef8e7a857 Reviewed-on: https://go-review.googlesource.com/c/go/+/402178 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Austin Clements <austin@google.com> Auto-Submit: Austin Clements <austin@google.com>
This commit is contained in:
parent
c15d0a93c7
commit
123e27170a
5 changed files with 31 additions and 57 deletions
|
|
@ -85,7 +85,7 @@ func GCMask(x any) (ret []byte) {
|
|||
func RunSchedLocalQueueTest() {
|
||||
_p_ := new(p)
|
||||
gs := make([]g, len(_p_.runq))
|
||||
escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
Escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
for i := 0; i < len(_p_.runq); i++ {
|
||||
if g, _ := runqget(_p_); g != nil {
|
||||
throw("runq is not empty initially")
|
||||
|
|
@ -109,7 +109,7 @@ func RunSchedLocalQueueStealTest() {
|
|||
p1 := new(p)
|
||||
p2 := new(p)
|
||||
gs := make([]g, len(p1.runq))
|
||||
escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
Escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
for i := 0; i < len(p1.runq); i++ {
|
||||
for j := 0; j < i; j++ {
|
||||
gs[j].sig = 0
|
||||
|
|
@ -157,7 +157,7 @@ func RunSchedLocalQueueEmptyTest(iters int) {
|
|||
done := make(chan bool, 1)
|
||||
p := new(p)
|
||||
gs := make([]g, 2)
|
||||
escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
Escape(gs) // Ensure gs doesn't move, since we use guintptrs
|
||||
ready := new(uint32)
|
||||
for i := 0; i < iters; i++ {
|
||||
*ready = 0
|
||||
|
|
@ -1260,7 +1260,7 @@ func NewGCController(gcPercent int) *GCController {
|
|||
// do 64-bit atomics on it, and if it gets stack-allocated
|
||||
// on a 32-bit architecture, it may get allocated unaligned
|
||||
// space.
|
||||
g := escape(new(GCController))
|
||||
g := Escape(new(GCController))
|
||||
g.gcControllerState.test = true // Mark it as a test copy.
|
||||
g.init(int32(gcPercent))
|
||||
return g
|
||||
|
|
@ -1334,13 +1334,13 @@ func (c *GCController) SetMaxIdleMarkWorkers(max int32) {
|
|||
c.setMaxIdleMarkWorkers(max)
|
||||
}
|
||||
|
||||
var alwaysFalse bool
|
||||
var escapeSink any
|
||||
|
||||
//go:noinline
|
||||
//go:norace
|
||||
func escape[T any](x T) T {
|
||||
escapeSink = x
|
||||
escapeSink = nil
|
||||
func Escape[T any](x T) T {
|
||||
if alwaysFalse {
|
||||
escapeSink = x
|
||||
}
|
||||
return x
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue