blob: ffb8ef75110b4e280a0f76a66c7ca82ca5866a82 [file] [log] [blame]
Russ Cox335da672011-08-31 07:37:14 -04001// $G -S $D/$F.go | egrep initdone >/dev/null && echo BUG sinit || true
Russ Coxa9425c72010-05-03 17:21:49 -07002
Russ Coxcd22afa2012-09-23 13:16:14 -04003// 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
Russ Coxa9425c72010-05-03 17:21:49 -07006// 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
Rob Pike80a97832012-02-24 11:48:19 +110010// Test that many initializations can be done at link time and
11// generate no executable init functions.
12
Russ Coxa9425c72010-05-03 17:21:49 -070013package p
14
15// Should be no init func in the assembly.
16// All these initializations should be done at link time.
17
Russ Cox335da672011-08-31 07:37:14 -040018type 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 }
Russ Coxa9425c72010-05-03 17:21:49 -070022
23var (
Russ Cox335da672011-08-31 07:37:14 -040024 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
Russ Coxa9425c72010-05-03 17:21:49 -070038)
39
Russ Cox335da672011-08-31 07:37:14 -040040var a = [3]int{1001, 1002, 1003}
41var s = S{1101, 1102, 1103}
42var c = []int{1201, 1202, 1203}
Russ Coxa9425c72010-05-03 17:21:49 -070043
Russ Cox335da672011-08-31 07:37:14 -040044var 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}}
Russ Coxa9425c72010-05-03 17:21:49 -070047
Russ Cox335da672011-08-31 07:37:14 -040048var 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}}
Russ Coxa9425c72010-05-03 17:21:49 -070051
Russ Cox335da672011-08-31 07:37:14 -040052var 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}}
Russ Coxa9425c72010-05-03 17:21:49 -070055
Russ Cox335da672011-08-31 07:37:14 -040056var answers = [...]int{
Russ Coxa9425c72010-05-03 17:21:49 -070057 // 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}
Russ Cox335da672011-08-31 07:37:14 -0400107
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