modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue8036.go (about)

     1  // run
     2  
     3  // Copyright 2014 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 8036. Stores necessary for stack scan being eliminated as redundant by optimizer.
     8  
     9  package main
    10  
    11  import "runtime"
    12  
    13  type T struct {
    14  	X *int
    15  	Y *int
    16  	Z *int
    17  }
    18  
    19  type TI [3]uintptr
    20  
    21  //go:noinline
    22  func G() (t TI) {
    23  	t[0] = 1
    24  	t[1] = 2
    25  	t[2] = 3
    26  	return
    27  }
    28  
    29  //go:noinline
    30  func F() (t T) {
    31  	t.X = newint()
    32  	t.Y = t.X
    33  	t.Z = t.Y
    34  	return
    35  }
    36  
    37  func newint() *int {
    38  	runtime.GC()
    39  	return nil
    40  }
    41  
    42  func main() {
    43  	G() // leave non-pointers where F's return values go
    44  	F()
    45  }