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