Initial commit: Go 1.23 release state
This commit is contained in:
96
test/fixedbugs/issue10958.go
Normal file
96
test/fixedbugs/issue10958.go
Normal file
@@ -0,0 +1,96 @@
|
||||
// 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")
|
||||
}
|
||||
Reference in New Issue
Block a user