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