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