github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/test/sinit.go (about) 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 13 package p 14 15 // Should be no init func in the assembly. 16 // All these initializations should be done at link time. 17 18 type S struct{ a, b, c int } 19 type SS struct{ aa, bb, cc S } 20 type SA struct{ a, b, c [3]int } 21 type SC struct{ a, b, c []int } 22 23 var ( 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 40 var a = [3]int{1001, 1002, 1003} 41 var s = S{1101, 1102, 1103} 42 var c = []int{1201, 1202, 1203} 43 44 var aa = [3][3]int{[3]int{2001, 2002, 2003}, [3]int{2004, 2005, 2006}, [3]int{2007, 2008, 2009}} 45 var as = [3]S{S{2101, 2102, 2103}, S{2104, 2105, 2106}, S{2107, 2108, 2109}} 46 var ac = [3][]int{[]int{2201, 2202, 2203}, []int{2204, 2205, 2206}, []int{2207, 2208, 2209}} 47 48 var sa = SA{[3]int{3001, 3002, 3003}, [3]int{3004, 3005, 3006}, [3]int{3007, 3008, 3009}} 49 var ss = SS{S{3101, 3102, 3103}, S{3104, 3105, 3106}, S{3107, 3108, 3109}} 50 var sc = SC{[]int{3201, 3202, 3203}, []int{3204, 3205, 3206}, []int{3207, 3208, 3209}} 51 52 var ca = [][3]int{[3]int{4001, 4002, 4003}, [3]int{4004, 4005, 4006}, [3]int{4007, 4008, 4009}} 53 var cs = []S{S{4101, 4102, 4103}, S{4104, 4105, 4106}, S{4107, 4108, 4109}} 54 var cc = [][]int{[]int{4201, 4202, 4203}, []int{4204, 4205, 4206}, []int{4207, 4208, 4209}} 55 56 var 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 108 var ( 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 125 var copy_a = a 126 var copy_s = s 127 var copy_c = c 128 129 var copy_aa = aa 130 var copy_as = as 131 var copy_ac = ac 132 133 var copy_sa = sa 134 var copy_ss = ss 135 var copy_sc = sc 136 137 var copy_ca = ca 138 var copy_cs = cs 139 var copy_cc = cc 140 141 var copy_answers = answers 142 143 var bx bool 144 var b0 = false 145 var b1 = true 146 147 var fx float32 148 var f0 = float32(0) 149 var f1 = float32(1) 150 151 var gx float64 152 var g0 = float64(0) 153 var g1 = float64(1) 154 155 var ix int 156 var i0 = 0 157 var i1 = 1 158 159 var jx uint 160 var j0 = uint(0) 161 var j1 = uint(1) 162 163 var cx complex64 164 var c0 = complex64(0) 165 var c1 = complex64(1) 166 167 var dx complex128 168 var d0 = complex128(0) 169 var d1 = complex128(1) 170 171 var sx []int 172 var s0 = []int{0, 0, 0} 173 var s1 = []int{1, 2, 3} 174 175 func fi() int 176 177 var ax [10]int 178 var a0 = [10]int{0, 0, 0} 179 var a1 = [10]int{1, 2, 3, 4} 180 181 type T struct{ X, Y int } 182 183 var tx T 184 var t0 = T{} 185 var t0a = T{0, 0} 186 var t0b = T{X: 0} 187 var t1 = T{X: 1, Y: 2} 188 var t1a = T{3, 4} 189 190 var psx *[]int 191 var ps0 = &[]int{0, 0, 0} 192 var ps1 = &[]int{1, 2, 3} 193 194 var pax *[10]int 195 var pa0 = &[10]int{0, 0, 0} 196 var pa1 = &[10]int{1, 2, 3} 197 198 var ptx *T 199 var pt0 = &T{} 200 var pt0a = &T{0, 0} 201 var pt0b = &T{X: 0} 202 var pt1 = &T{X: 1, Y: 2} 203 var pt1a = &T{3, 4} 204 205 var copy_bx = bx 206 var copy_b0 = b0 207 var copy_b1 = b1 208 209 var copy_fx = fx 210 var copy_f0 = f0 211 var copy_f1 = f1 212 213 var copy_gx = gx 214 var copy_g0 = g0 215 var copy_g1 = g1 216 217 var copy_ix = ix 218 var copy_i0 = i0 219 var copy_i1 = i1 220 221 var copy_jx = jx 222 var copy_j0 = j0 223 var copy_j1 = j1 224 225 var copy_cx = cx 226 var copy_c0 = c0 227 var copy_c1 = c1 228 229 var copy_dx = dx 230 var copy_d0 = d0 231 var copy_d1 = d1 232 233 var copy_sx = sx 234 var copy_s0 = s0 235 var copy_s1 = s1 236 237 var copy_ax = ax 238 var copy_a0 = a0 239 var copy_a1 = a1 240 241 var copy_tx = tx 242 var copy_t0 = t0 243 var copy_t0a = t0a 244 var copy_t0b = t0b 245 var copy_t1 = t1 246 var copy_t1a = t1a 247 248 var copy_psx = psx 249 var copy_ps0 = ps0 250 var copy_ps1 = ps1 251 252 var copy_pax = pax 253 var copy_pa0 = pa0 254 var copy_pa1 = pa1 255 256 var copy_ptx = ptx 257 var copy_pt0 = pt0 258 var copy_pt0a = pt0a 259 var copy_pt0b = pt0b 260 var copy_pt1 = pt1 261 var copy_pt1a = pt1a 262 263 var _ interface{} = 1 264 265 type T1 int 266 267 func (t *T1) M() {} 268 269 type Mer interface { M() } 270 271 var _ Mer = (*T1)(nil)