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