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