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