// 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 init1 // issue 6683 (marked as WorkingAsIntended) type T0 struct{} func (T0) m() int { return y0 } var x0 = T0{} var y0 /* ERROR initialization cycle */ = x0.m() type T1 struct{} func (T1) m() int { return y1 } var x1 interface { m() int } = T1{} var y1 = x1.m() // no cycle reported, x1 is of interface type // issue 6703 (modified) var x2 /* ERROR initialization cycle */ = T2.m var y2 = x2 type T2 struct{} func (T2) m() int { _ = y2 return 0 } var x3 /* ERROR initialization cycle */ = T3.m(T3{}) // <<<< added (T3{}) var y3 = x3 type T3 struct{} func (T3) m() int { _ = y3 return 0 } var x4 /* ERROR initialization cycle */ = T4{}.m // <<<< added {} var y4 = x4 type T4 struct{} func (T4) m() int { _ = y4 return 0 } var x5 /* ERROR initialization cycle */ = T5{}.m() // <<<< added () var y5 = x5 type T5 struct{} func (T5) m() int { _ = y5 return 0 } // issue 4847 // simplified test case var x6 = f6 var y6 /* ERROR initialization cycle */ = f6 func f6() { _ = y6 } // full test case type ( E int S int ) type matcher func(s *S) E func matchList(s *S) E { return matcher(matchAnyFn)(s) } var foo = matcher(matchList) var matchAny /* ERROR initialization cycle */ = matcher(matchList) func matchAnyFn(s *S) (err E) { return matchAny(s) }