-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit1.go
97 lines (60 loc) · 1.47 KB
/
init1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// 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) }