// $G $D/$F.go && $L $F.$A && ./$A.out // Copyright 2010 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. // http://code.google.com/p/go/issues/detail?id=745 package main type T1 struct { T2 *T2 } type T2 struct { T3 *T3 } type T3 struct { T4 []*T4 } type T4 struct { X int } func f() *T1 { x := &T1{ &T2{ &T3{ [1]*T4{ &T4{5}, }[0:], }, }, } return x } func g(x int) { if x == 0 { return } g(x-1) } func main() { x := f() g(100) // smash temporaries left over on stack if x.T2.T3.T4[0].X != 5 { println("BUG", x.T2.T3.T4[0].X) } }