]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.24] testing: detect a stopped timer in B.Loop
authorAustin Clements <austin@google.com>
Thu, 20 Mar 2025 16:16:17 +0000 (12:16 -0400)
committerGopher Robot <gobot@golang.org>
Wed, 26 Mar 2025 16:44:03 +0000 (09:44 -0700)
commitf3a302358f56ba7d9b79d96798b51cc0cbe003f3
tree180c9e7bbcd6982eaeabd29c373b0c14211768bb
parent1d755aa48867de99617155cd1d8564cee1fbfe9e
[release-branch.go1.24] testing: detect a stopped timer in B.Loop

Currently, if the user stops the timer in a B.Loop benchmark loop, the
benchmark will run until it hits the timeout and fails.

Fix this by detecting that the timer is stopped and failing the
benchmark right away. We avoid making the fast path more expensive for
this check by "poisoning" the B.Loop iteration counter when the timer
is stopped so that it falls back to the slow path, which can check the
timer.

This causes b to escape from B.Loop, which is totally harmless because
it was already definitely heap-allocated. But it causes the
test/inline_testingbloop.go errorcheck test to fail. I don't think the
escape messages actually mattered to that test, they just had to be
matched. To fix this, we drop the debug level to -m=1, since -m=2
prints a lot of extra information for escaping parameters that we
don't want to deal with, and change one error check to allow b to
escape.

Fixes #72974.

Change-Id: I7d4abbb1ec1e096685514536f91ba0d581cca6b7
Reviewed-on: https://go-review.googlesource.com/c/go/+/659657
Auto-Submit: Austin Clements <austin@google.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/660558
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
src/cmd/compile/internal/inline/interleaved/interleaved.go
src/cmd/compile/internal/test/inl_test.go
src/testing/benchmark.go
src/testing/loop_test.go
test/inline_testingbloop.go