Source file test/fixedbugs/issue30476.go

     1  // run
     2  
     3  // Copyright 2019 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 30476: KeepAlive didn't keep stack object alive.
     8  
     9  package main
    10  
    11  import "runtime"
    12  
    13  func main() {
    14  	x := new([10]int)
    15  	runtime.SetFinalizer(x, func(*[10]int) { panic("FAIL: finalizer runs") })
    16  	p := &T{x, 0}
    17  	use(p)
    18  	runtime.GC()
    19  	runtime.GC()
    20  	runtime.GC()
    21  	runtime.KeepAlive(p)
    22  }
    23  
    24  type T struct {
    25  	x *[10]int
    26  	y int
    27  }
    28  
    29  //go:noinline
    30  func use(*T) {}
    31  

View as plain text