// 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()
}
