| // run |
| |
| // Copyright 2013 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. |
| |
| // Used to be miscompiled by gccgo, due to a bug in handling |
| // initialization ordering. |
| |
| package main |
| |
| func F(a ...interface{}) interface{} { |
| s := 0 |
| for _, v := range a { |
| s += v.(int) |
| } |
| return s |
| } |
| |
| var V1 = F(V10, V4, V3, V11) |
| |
| var V2 = F(V1) |
| |
| var V3 = F(1) |
| |
| var V4 = F(2) |
| |
| var V5 = F(3) |
| |
| var V6 = F(4) |
| |
| var V7 = F(5) |
| |
| var V8 = F(V14, V7, V3, V6, V5) |
| |
| var V9 = F(V4, F(V12)) |
| |
| var V10 = F(V4, V9) |
| |
| var V11 = F(6) |
| |
| var V12 = F(V5, V3, V8) |
| |
| var V13 = F(7) |
| |
| var V14 = F(8) |
| |
| func expect(name string, a interface{}, b int) { |
| if a.(int) != b { |
| panic(name) |
| } |
| } |
| |
| func main() { |
| expect("V1", V1, 38) |
| expect("V2", V2, 38) |
| expect("V3", V3, 1) |
| expect("V4", V4, 2) |
| expect("V5", V5, 3) |
| expect("V6", V6, 4) |
| expect("V7", V7, 5) |
| expect("V8", V8, 21) |
| expect("V9", V9, 27) |
| expect("V10", V10, 29) |
| expect("V11", V11, 6) |
| expect("V12", V12, 25) |
| expect("V13", V13, 7) |
| expect("V14", V14, 8) |
| } |