// run // Copyright 2016 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. // Test to make sure we don't think values are dead // when they are assigned to a PPARAMOUT slot before // the last GC safepoint. package main import ( "fmt" "runtime" ) // When a T is deallocated, T[1] is certain to // get clobbered (the runtime writes 0xdeaddeaddeaddead there). type T [4]int func f() (r, s *T) { r = &T{0x30, 0x31, 0x32, 0x33} runtime.GC() s = &T{0x40, 0x41, 0x42, 0x43} runtime.GC() return } func main() { r, s := f() if r[1] != 0x31 { fmt.Printf("bad r[1], want 0x31 got %x\n", r[1]) } if s[1] != 0x41 { fmt.Printf("bad s[1], want 0x41 got %x\n", s[1]) } }