| // run |
| |
| // Copyright 2012 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 that initializing struct fields out of order still runs |
| // functions in the right order. This failed with gccgo. |
| |
| package main |
| |
| type S struct { |
| i1, i2, i3 int |
| } |
| |
| var G int |
| |
| func v(i int) int { |
| if i != G { |
| panic(i) |
| } |
| G = i + 1 |
| return G |
| } |
| |
| func F() S { |
| return S{ |
| i1: v(0), |
| i3: v(1), |
| i2: v(2), |
| } |
| } |
| |
| func main() { |
| s := F() |
| if s != (S{1, 3, 2}) { |
| panic(s) |
| } |
| } |