mirror of
https://github.com/golang/go
synced 2024-09-05 16:04:50 +00:00
![Dmitri Shuralyov](/assets/img/avatar_default.png)
Most of the test cases in the test directory use the new go:build syntax already. Convert the rest. In general, try to place the build constraint line below the test directive comment in more places. For #41184. For #60268. Change-Id: I11c41a0642a8a26dc2eda1406da908645bbc005b Cq-Include-Trybots: luci.golang.try:gotip-linux-386-longtest,gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/536236 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
97 lines
1.9 KiB
Go
97 lines
1.9 KiB
Go
// buildrun -t 10 -gcflags=-d=ssa/insert_resched_checks/on,ssa/check/on
|
|
|
|
//go:build !nacl && !js && disabled_see_issue_18589
|
|
|
|
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Test is disabled because it flakes when run in all.bash
|
|
// on some platforms, but is useful standalone to verify
|
|
// that rescheduling checks are working (and we may wish
|
|
// to investigate the flake, since it suggests that the
|
|
// loop rescheduling check may not work right on those
|
|
// platforms).
|
|
|
|
// This checks to see that call-free infinite loops do not
|
|
// block garbage collection. IF YOU RUN IT STANDALONE without
|
|
// -gcflags=-d=ssa/insert_resched_checks/on in a not-experimental
|
|
// build, it should hang.
|
|
|
|
package main
|
|
|
|
import (
|
|
"runtime"
|
|
)
|
|
|
|
var someglobal1 int
|
|
var someglobal2 int
|
|
var someglobal3 int
|
|
|
|
//go:noinline
|
|
func f() {}
|
|
|
|
func standinacorner1() {
|
|
for someglobal1&1 == 0 {
|
|
someglobal1++
|
|
someglobal1++
|
|
}
|
|
}
|
|
|
|
func standinacorner2(i int) {
|
|
// contains an irreducible loop containing changes to memory
|
|
if i != 0 {
|
|
goto midloop
|
|
}
|
|
|
|
loop:
|
|
if someglobal2&1 != 0 {
|
|
goto done
|
|
}
|
|
someglobal2++
|
|
midloop:
|
|
someglobal2++
|
|
goto loop
|
|
|
|
done:
|
|
return
|
|
}
|
|
|
|
func standinacorner3() {
|
|
for someglobal3&1 == 0 {
|
|
if someglobal3&2 != 0 {
|
|
for someglobal3&3 == 2 {
|
|
someglobal3++
|
|
someglobal3++
|
|
someglobal3++
|
|
someglobal3++
|
|
}
|
|
}
|
|
someglobal3++
|
|
someglobal3++
|
|
someglobal3++
|
|
someglobal3++
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
go standinacorner1()
|
|
go standinacorner2(0)
|
|
go standinacorner3()
|
|
// println("About to stand in a corner1")
|
|
for someglobal1 == 0 {
|
|
runtime.Gosched()
|
|
}
|
|
// println("About to stand in a corner2")
|
|
for someglobal2 == 0 {
|
|
runtime.Gosched()
|
|
}
|
|
// println("About to stand in a corner3")
|
|
for someglobal3 == 0 {
|
|
runtime.Gosched()
|
|
}
|
|
// println("About to GC")
|
|
runtime.GC()
|
|
// println("Success")
|
|
}
|