// 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. // initialization cycles package init0 // initialization cycles (we don't know the types) const ( s0 /* ERROR "initialization cycle: s0 refers to itself" */ = s0 x0 /* ERROR "initialization cycle for x0" */ = y0 y0 = x0 a0 = b0 b0 /* ERROR "initialization cycle for b0" */ = c0 c0 = d0 d0 = b0 ) var ( s1 /* ERROR "initialization cycle: s1 refers to itself" */ = s1 x1 /* ERROR "initialization cycle for x1" */ = y1 y1 = x1 a1 = b1 b1 /* ERROR "initialization cycle for b1" */ = c1 c1 = d1 d1 = b1 ) // initialization cycles (we know the types) const ( s2 /* ERROR "initialization cycle: s2 refers to itself" */ int = s2 x2 /* ERROR "initialization cycle for x2" */ int = y2 y2 = x2 a2 = b2 b2 /* ERROR "initialization cycle for b2" */ int = c2 c2 = d2 d2 = b2 ) var ( s3 /* ERROR "initialization cycle: s3 refers to itself" */ int = s3 x3 /* ERROR "initialization cycle for x3" */ int = y3 y3 = x3 a3 = b3 b3 /* ERROR "initialization cycle for b3" */ int = c3 c3 = d3 d3 = b3 ) // cycles via struct fields type S1 struct { f int } const cx3 S1 /* ERROR "invalid constant type" */ = S1{cx3.f} var vx3 /* ERROR "initialization cycle: vx3 refers to itself" */ S1 = S1{vx3.f} // cycles via functions var x4 = x5 var x5 /* ERROR "initialization cycle for x5" */ = f1() func f1() int { return x5*10 } var x6, x7 /* ERROR "initialization cycle" */ = f2() var x8 = x7 func f2() (int, int) { return f3() + f3(), 0 } func f3() int { return x8 } // cycles via function literals var x9 /* ERROR "initialization cycle: x9 refers to itself" */ = func() int { return x9 }() var x10 /* ERROR "initialization cycle for x10" */ = f4() func f4() int { _ = func() { _ = x10 } return 0 } // cycles via method expressions type T1 struct{} func (T1) m() bool { _ = x11; return false } var x11 /* ERROR "initialization cycle for x11" */ = T1.m(T1{}) // cycles via method values type T2 struct{} func (T2) m() bool { _ = x12; return false } var t1 T2 var x12 /* ERROR "initialization cycle for x12" */ = t1.m