| // run |
| |
| // Copyright 2014 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. |
| |
| // Issue 8036. Stores necessary for stack scan being eliminated as redundant by optimizer. |
| |
| package main |
| |
| import "runtime" |
| |
| type T struct { |
| X *int |
| Y *int |
| Z *int |
| } |
| |
| type TI [3]uintptr |
| |
| //go:noinline |
| func G() (t TI) { |
| t[0] = 1 |
| t[1] = 2 |
| t[2] = 3 |
| return |
| } |
| |
| //go:noinline |
| func F() (t T) { |
| t.X = newint() |
| t.Y = t.X |
| t.Z = t.Y |
| return |
| } |
| |
| func newint() *int { |
| runtime.GC() |
| return nil |
| } |
| |
| func main() { |
| G() // leave non-pointers where F's return values go |
| F() |
| } |