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