...
Run Format

Source file test/fixedbugs/issue10958.go

Documentation: test/fixedbugs

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

View as plain text