+++ /dev/null
-package main
-
-import "fmt"
-
-// Test of initialization order of package-level vars.
-
-var counter int
-
-func next() int {
- c := counter
- counter++
- return c
-}
-
-func next2() (x int, y int) {
- x = next()
- y = next()
- return
-}
-
-func makeOrder() int {
- _, _, _, _ = f, b, d, e
- return 0
-}
-
-func main() {
- // Initialization constraints:
- // - {f,b,c/d,e} < order (ref graph traversal)
- // - order < {a} (lexical order)
- // - b < c/d < e < f (lexical order)
- // Solution: a b c/d e f
- abcdef := [6]int{a, b, c, d, e, f}
- if abcdef != [6]int{0, 1, 2, 3, 4, 5} {
- panic(abcdef)
- }
-}
-
-var order = makeOrder()
-
-var a, b = next(), next()
-var c, d = next2()
-var e, f = next(), next()
-
-// ------------------------------------------------------------------------
-
-var order2 []string
-
-func create(x int, name string) int {
- order2 = append(order2, name)
- return x
-}
-
-var C = create(B+1, "C")
-var A, B = create(1, "A"), create(2, "B")
-
-// Initialization order of package-level value specs.
-func init() {
- x := fmt.Sprint(order2)
- // Result varies by toolchain. This is a spec bug.
- if x != "[B C A]" && // gc
- x != "[A B C]" { // go/types
- panic(x)
- }
- if C != 3 {
- panic(c)
- }
-}