1// $G -S $D/$F.go | egrep initdone >/dev/null && echo BUG sinit || true
2
3// NOTE: This test is not run by 'run.go' and so not run by all.bash.
4// To run this test you must use the ./run shell script.
5
6// Copyright 2010 The Go Authors.  All rights reserved.
7// Use of this source code is governed by a BSD-style
8// license that can be found in the LICENSE file.
9
10// Test that many initializations can be done at link time and
11// generate no executable init functions.
12
13package p
14
15// Should be no init func in the assembly.
16// All these initializations should be done at link time.
17
18type S struct{ a, b, c int }
19type SS struct{ aa, bb, cc S }
20type SA struct{ a, b, c [3]int }
21type SC struct{ a, b, c []int }
22
23var (
24	zero                      = 2
25	one                       = 1
26	pi                        = 3.14
27	slice                     = []byte{1, 2, 3}
28	sliceInt                  = []int{1, 2, 3}
29	hello                     = "hello, world"
30	bytes                     = []byte("hello, world")
31	four, five                = 4, 5
32	x, y                      = 0.1, "hello"
33	nilslice   []byte         = nil
34	nilmap     map[string]int = nil
35	nilfunc    func()         = nil
36	nilchan    chan int       = nil
37	nilptr     *byte          = nil
38)
39
40var a = [3]int{1001, 1002, 1003}
41var s = S{1101, 1102, 1103}
42var c = []int{1201, 1202, 1203}
43
44var aa = [3][3]int{[3]int{2001, 2002, 2003}, [3]int{2004, 2005, 2006}, [3]int{2007, 2008, 2009}}
45var as = [3]S{S{2101, 2102, 2103}, S{2104, 2105, 2106}, S{2107, 2108, 2109}}
46var ac = [3][]int{[]int{2201, 2202, 2203}, []int{2204, 2205, 2206}, []int{2207, 2208, 2209}}
47
48var sa = SA{[3]int{3001, 3002, 3003}, [3]int{3004, 3005, 3006}, [3]int{3007, 3008, 3009}}
49var ss = SS{S{3101, 3102, 3103}, S{3104, 3105, 3106}, S{3107, 3108, 3109}}
50var sc = SC{[]int{3201, 3202, 3203}, []int{3204, 3205, 3206}, []int{3207, 3208, 3209}}
51
52var ca = [][3]int{[3]int{4001, 4002, 4003}, [3]int{4004, 4005, 4006}, [3]int{4007, 4008, 4009}}
53var cs = []S{S{4101, 4102, 4103}, S{4104, 4105, 4106}, S{4107, 4108, 4109}}
54var cc = [][]int{[]int{4201, 4202, 4203}, []int{4204, 4205, 4206}, []int{4207, 4208, 4209}}
55
56var answers = [...]int{
57	// s
58	1101, 1102, 1103,
59
60	// ss
61	3101, 3102, 3103,
62	3104, 3105, 3106,
63	3107, 3108, 3109,
64
65	// [0]
66	1001, 1201, 1301,
67	2101, 2102, 2103,
68	4101, 4102, 4103,
69	5101, 5102, 5103,
70	3001, 3004, 3007,
71	3201, 3204, 3207,
72	3301, 3304, 3307,
73
74	// [0][j]
75	2001, 2201, 2301, 4001, 4201, 4301, 5001, 5201, 5301,
76	2002, 2202, 2302, 4002, 4202, 4302, 5002, 5202, 5302,
77	2003, 2203, 2303, 4003, 4203, 4303, 5003, 5203, 5303,
78
79	// [1]
80	1002, 1202, 1302,
81	2104, 2105, 2106,
82	4104, 4105, 4106,
83	5104, 5105, 5106,
84	3002, 3005, 3008,
85	3202, 3205, 3208,
86	3302, 3305, 3308,
87
88	// [1][j]
89	2004, 2204, 2304, 4004, 4204, 4304, 5004, 5204, 5304,
90	2005, 2205, 2305, 4005, 4205, 4305, 5005, 5205, 5305,
91	2006, 2206, 2306, 4006, 4206, 4306, 5006, 5206, 5306,
92
93	// [2]
94	1003, 1203, 1303,
95	2107, 2108, 2109,
96	4107, 4108, 4109,
97	5107, 5108, 5109,
98	3003, 3006, 3009,
99	3203, 3206, 3209,
100	3303, 3306, 3309,
101
102	// [2][j]
103	2007, 2207, 2307, 4007, 4207, 4307, 5007, 5207, 5307,
104	2008, 2208, 2308, 4008, 4208, 4308, 5008, 5208, 5308,
105	2009, 2209, 2309, 4009, 4209, 4309, 5009, 5209, 5309,
106}
107
108var (
109	copy_zero = zero
110	copy_one = one
111	copy_pi = pi
112	copy_slice = slice
113	copy_sliceInt = sliceInt
114	copy_hello = hello
115	copy_bytes = bytes
116	copy_four, copy_five = four, five
117	copy_x, copy_y = x, y
118	copy_nilslice = nilslice
119	copy_nilmap = nilmap
120	copy_nilfunc = nilfunc
121	copy_nilchan = nilchan
122	copy_nilptr = nilptr
123)
124
125var copy_a = a
126var copy_s = s
127var copy_c = c
128
129var copy_aa = aa
130var copy_as = as
131var copy_ac = ac
132
133var copy_sa = sa
134var copy_ss = ss
135var copy_sc = sc
136
137var copy_ca = ca
138var copy_cs = cs
139var copy_cc = cc
140
141var copy_answers = answers
142
143var bx bool
144var b0 = false
145var b1 = true
146
147var fx float32
148var f0 = float32(0)
149var f1 = float32(1)
150
151var gx float64
152var g0 = float64(0)
153var g1 = float64(1)
154
155var ix int
156var i0 = 0
157var i1 = 1
158
159var jx uint
160var j0 = uint(0)
161var j1 = uint(1)
162
163var cx complex64
164var c0 = complex64(0)
165var c1 = complex64(1)
166
167var dx complex128
168var d0 = complex128(0)
169var d1 = complex128(1)
170
171var sx []int
172var s0 = []int{0, 0, 0}
173var s1 = []int{1, 2, 3}
174
175func fi() int
176
177var ax [10]int
178var a0 = [10]int{0, 0, 0}
179var a1 = [10]int{1, 2, 3, 4}
180
181type T struct{ X, Y int }
182
183var tx T
184var t0 = T{}
185var t0a = T{0, 0}
186var t0b = T{X: 0}
187var t1 = T{X: 1, Y: 2}
188var t1a = T{3, 4}
189
190var psx *[]int
191var ps0 = &[]int{0, 0, 0}
192var ps1 = &[]int{1, 2, 3}
193
194var pax *[10]int
195var pa0 = &[10]int{0, 0, 0}
196var pa1 = &[10]int{1, 2, 3}
197
198var ptx *T
199var pt0 = &T{}
200var pt0a = &T{0, 0}
201var pt0b = &T{X: 0}
202var pt1 = &T{X: 1, Y: 2}
203var pt1a = &T{3, 4}
204
205var copy_bx = bx
206var copy_b0 = b0
207var copy_b1 = b1
208
209var copy_fx = fx
210var copy_f0 = f0
211var copy_f1 = f1
212
213var copy_gx = gx
214var copy_g0 = g0
215var copy_g1 = g1
216
217var copy_ix = ix
218var copy_i0 = i0
219var copy_i1 = i1
220
221var copy_jx = jx
222var copy_j0 = j0
223var copy_j1 = j1
224
225var copy_cx = cx
226var copy_c0 = c0
227var copy_c1 = c1
228
229var copy_dx = dx
230var copy_d0 = d0
231var copy_d1 = d1
232
233var copy_sx = sx
234var copy_s0 = s0
235var copy_s1 = s1
236
237var copy_ax = ax
238var copy_a0 = a0
239var copy_a1 = a1
240
241var copy_tx = tx
242var copy_t0 = t0
243var copy_t0a = t0a
244var copy_t0b = t0b
245var copy_t1 = t1
246var copy_t1a = t1a
247
248var copy_psx = psx
249var copy_ps0 = ps0
250var copy_ps1 = ps1
251
252var copy_pax = pax
253var copy_pa0 = pa0
254var copy_pa1 = pa1
255
256var copy_ptx = ptx
257var copy_pt0 = pt0
258var copy_pt0a = pt0a
259var copy_pt0b = pt0b
260var copy_pt1 = pt1
261var copy_pt1a = pt1a
262
263var _ interface{} = 1
264
265type T1 int
266
267func (t *T1) M() {}
268
269type Mer interface { M() }
270
271var _ Mer = (*T1)(nil)
272