Frameless function is an interesting case for call injection
espcially for LR architectures. Extend the test for this case.
Change-Id: I074090d09eeaf642e71e3f44fea216f66d39b817
Reviewed-on: https://go-review.googlesource.com/c/go/+/202339
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
debug.SetGCPercent(-1)
// Start a goroutine with no sync safe-points.
- var ready uint32
+ var ready, ready2 uint32
go func() {
for {
atomic.StoreUint32(&ready, 1)
}
}()
+ // Also start one with a frameless function.
+ // This is an especially interesting case for
+ // LR machines.
+ go func() {
+ atomic.StoreUint32(&ready2, 1)
+ frameless()
+ }()
// Wait for the goroutine to stop passing through sync
// safe-points.
- for atomic.LoadUint32(&ready) == 0 {
+ for atomic.LoadUint32(&ready) == 0 || atomic.LoadUint32(&ready2) == 0 {
runtime.Gosched()
}
println("OK")
}
+
+//go:noinline
+func frameless() {
+ for i := int64(0); i < 1<<62; i++ {
+ out += i
+ }
+}
+
+var out int64