Source file test/fixedbugs/issue16948.go

     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  

View as plain text