1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // initialization cycles
6
7 package init0
8
9 // initialization cycles (we don't know the types)
10 const (
11 s0 /* ERROR initialization cycle */ = s0
12
13 x0 /* ERROR initialization cycle */ = y0
14 y0 = x0
15
16 a0 = b0
17 b0 /* ERROR initialization cycle */ = c0
18 c0 = d0
19 d0 = b0
20 )
21
22 var (
23 s1 /* ERROR initialization cycle */ = s1
24
25 x1 /* ERROR initialization cycle */ = y1
26 y1 = x1
27
28 a1 = b1
29 b1 /* ERROR initialization cycle */ = c1
30 c1 = d1
31 d1 = b1
32 )
33
34 // initialization cycles (we know the types)
35 const (
36 s2 /* ERROR initialization cycle */ int = s2
37
38 x2 /* ERROR initialization cycle */ int = y2
39 y2 = x2
40
41 a2 = b2
42 b2 /* ERROR initialization cycle */ int = c2
43 c2 = d2
44 d2 = b2
45 )
46
47 var (
48 s3 /* ERROR initialization cycle */ int = s3
49
50 x3 /* ERROR initialization cycle */ int = y3
51 y3 = x3
52
53 a3 = b3
54 b3 /* ERROR initialization cycle */ int = c3
55 c3 = d3
56 d3 = b3
57 )
58
59 // cycles via struct fields
60
61 type S1 struct {
62 f int
63 }
64 const cx3 S1 /* ERROR invalid constant type */ = S1{cx3.f}
65 var vx3 /* ERROR initialization cycle */ S1 = S1{vx3.f}
66
67 // cycles via functions
68
69 var x4 = x5
70 var x5 /* ERROR initialization cycle */ = f1()
71 func f1() int { return x5*10 }
72
73 var x6, x7 /* ERROR initialization cycle */ = f2()
74 var x8 = x7
75 func f2() (int, int) { return f3() + f3(), 0 }
76 func f3() int { return x8 }
77
78 // cycles via function literals
79
80 var x9 /* ERROR initialization cycle */ = func() int { return x9 }()
81
82 var x10 /* ERROR initialization cycle */ = f4()
83
84 func f4() int {
85 _ = func() {
86 _ = x10
87 }
88 return 0
89 }
90
91 // cycles via method expressions
92
93 type T1 struct{}
94
95 func (T1) m() bool { _ = x11; return false }
96
97 var x11 /* ERROR initialization cycle */ = T1.m(T1{})
98
99 // cycles via method values
100
101 type T2 struct{}
102
103 func (T2) m() bool { _ = x12; return false }
104
105 var t1 T2
106 var x12 /* ERROR initialization cycle */ = t1.m
107
View as plain text