github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/test/fixedbugs/bug473.go (about)

     1  // run
     2  
     3  // Copyright 2013 The Go Authors.  All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Used to be miscompiled by gccgo, due to a bug in handling
     8  // initialization ordering.
     9  
    10  package main
    11  
    12  func F(a ...interface{}) interface{} {
    13  	s := 0
    14  	for _, v := range a {
    15  		s += v.(int)
    16  	}
    17  	return s
    18  }
    19  
    20  var V1 = F(V10, V4, V3, V11)
    21  
    22  var V2 = F(V1)
    23  
    24  var V3 = F(1)
    25  
    26  var V4 = F(2)
    27  
    28  var V5 = F(3)
    29  
    30  var V6 = F(4)
    31  
    32  var V7 = F(5)
    33  
    34  var V8 = F(V14, V7, V3, V6, V5)
    35  
    36  var V9 = F(V4, F(V12))
    37  
    38  var V10 = F(V4, V9)
    39  
    40  var V11 = F(6)
    41  
    42  var V12 = F(V5, V3, V8)
    43  
    44  var V13 = F(7)
    45  
    46  var V14 = F(8)
    47  
    48  func expect(name string, a interface{}, b int) {
    49  	if a.(int) != b {
    50  		panic(name)
    51  	}
    52  }
    53  
    54  func main() {
    55  	expect("V1", V1, 38)
    56  	expect("V2", V2, 38)
    57  	expect("V3", V3, 1)
    58  	expect("V4", V4, 2)
    59  	expect("V5", V5, 3)
    60  	expect("V6", V6, 4)
    61  	expect("V7", V7, 5)
    62  	expect("V8", V8, 21)
    63  	expect("V9", V9, 27)
    64  	expect("V10", V10, 29)
    65  	expect("V11", V11, 6)
    66  	expect("V12", V12, 25)
    67  	expect("V13", V13, 7)
    68  	expect("V14", V14, 8)
    69  }