Home | History | Annotate | Download | only in fixedbugs
      1 // run
      2 
      3 // Copyright 2016 The Go Authors. All rights reserved.
      4 // Use of this source code is governed by a BSD-style
      5 // license that can be found in the LICENSE file.
      6 
      7 // issue 16948: make sure intrinsified atomic ops won't
      8 // confuse the scheduler.
      9 
     10 package main
     11 
     12 import "sync/atomic"
     13 
     14 func main() {
     15 	f()
     16 }
     17 
     18 var x int32
     19 
     20 type T [10]int
     21 var sink *T
     22 
     23 func f() (t T) {
     24 	atomic.AddInt32(&x, 1)
     25 	g(42, 42, 42, 42, 42, &t) // use int values that is invalid pointer to smash the stack slot of return value of runtime.newobject
     26 	return
     27 }
     28 
     29 //go:noinline
     30 func g(a, b, c, d, e int, p *T) {
     31 	var t [10000]int // a large stack frame to trigger stack growing
     32 	_ = t
     33 	sink = p // force p (in caller) heap allocated
     34 }
     35