// +build !nacl,disabled_see_issue_18589
// buildrun -t 10  -gcflags=-d=ssa/insert_resched_checks/on,ssa/check/on

// 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")
}
