Source file
test/inline.go
1
2
3
4
5
6
7
8
9
10
11
12 package foo
13
14 import (
15 "errors"
16 "runtime"
17 "unsafe"
18 )
19
20 func add2(p *byte, n uintptr) *byte {
21 return (*byte)(add1(unsafe.Pointer(p), n))
22 }
23
24 func add1(p unsafe.Pointer, x uintptr) unsafe.Pointer {
25 return unsafe.Pointer(uintptr(p) + x)
26 }
27
28 func f(x *byte) *byte {
29 return add2(x, 1)
30 }
31
32
33 func g(x int) int {
34 return x + 1
35 }
36
37 func h(x int) int {
38 return x + 2
39 }
40
41 func i(x int) int {
42 const y = 2
43 return x + y
44 }
45
46 func j(x int) int {
47 switch {
48 case x > 0:
49 return x + 2
50 default:
51 return x + 1
52 }
53 }
54
55 func f2() int {
56 tmp1 := h
57 tmp2 := tmp1
58 return tmp2(0)
59 }
60
61 var abc = errors.New("abc")
62
63 var somethingWrong error
64
65
66 func l(x, y int) (int, int, error) {
67 e := func(err error) (int, int, error) {
68 return 0, 0, err
69 }
70 if x == y {
71 e(somethingWrong)
72 } else {
73 f := e
74 f(nil)
75 }
76 _ = e
77 return y, x, nil
78 }
79
80
81 func m() int {
82 foo := func() int { return 1 }
83 x := foo()
84 foo = func() int { return 2 }
85 return x + foo()
86 }
87
88
89 func n() int {
90 foo := func() int { return 1 }
91 bar := &foo
92 x := (*bar)() + foo()
93 return x
94 }
95
96
97 func o() int {
98 foo := func() int { return 1 }
99 func(x int) {
100 if x > 10 {
101 foo = func() int { return 2 }
102 }
103 }(11)
104 return foo()
105 }
106
107 func p() int {
108 return func() int { return 42 }()
109 }
110
111 func q(x int) int {
112 foo := func() int { return x * 2 }
113 _ = foo
114 return foo()
115 }
116
117 func r(z int) int {
118 foo := func(x int) int {
119 return x + z
120 }
121 bar := func(x int) int {
122 return x + func(y int) int {
123 return 2*y + x*z
124 }(x)
125 }
126 _, _ = foo, bar
127
128 return foo(42) + bar(42)
129 }
130
131 func s0(x int) int {
132 foo := func() {
133 x = x + 1
134 }
135 foo()
136 _ = foo
137 return x
138 }
139
140 func s1(x int) int {
141 foo := func() int {
142 return x
143 }
144 x = x + 1
145 _ = foo
146 return foo()
147 }
148
149 func switchBreak(x, y int) int {
150 var n int
151 switch x {
152 case 0:
153 n = 1
154 Done:
155 switch y {
156 case 0:
157 n += 10
158 break Done
159 }
160 n = 2
161 }
162 return n
163 }
164
165 func switchType(x interface{}) int {
166 switch x.(type) {
167 case int:
168 return x.(int)
169 default:
170 return 0
171 }
172 }
173
174
175
176 func switchConst1(p func(string)) {
177 const c = 1
178 switch c {
179 case 0:
180 p("zero")
181 case 1:
182 p("one")
183 case 2:
184 p("two")
185 default:
186 p("other")
187 }
188 }
189
190 func switchConst2() string {
191 switch runtime.GOOS {
192 case "linux":
193 return "Leenooks"
194 case "windows":
195 return "Windoze"
196 case "darwin":
197 return "MackBone"
198 case "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100":
199 return "Numbers"
200 default:
201 return "oh nose!"
202 }
203 }
204 func switchConst3() string {
205 switch runtime.GOOS {
206 case "Linux":
207 panic("Linux")
208 case "Windows":
209 panic("Windows")
210 case "Darwin":
211 panic("Darwin")
212 case "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100":
213 panic("Numbers")
214 default:
215 return "oh nose!"
216 }
217 }
218 func switchConst4() {
219 const intSize = 32 << (^uint(0) >> 63)
220 want := func() string {
221 switch intSize {
222 case 32:
223 return "32"
224 case 64:
225 return "64"
226 default:
227 panic("unreachable")
228 }
229 }()
230 _ = want
231 }
232
233 func inlineRangeIntoMe(data []int) {
234 rangeFunc(data, 12)
235 }
236
237 func rangeFunc(xs []int, b int) int {
238 for i, x := range xs {
239 if x == b {
240 return i
241 }
242 }
243 return -1
244 }
245
246 type T struct{}
247
248 func (T) meth(int, int) {}
249
250 func k() (T, int, int) { return T{}, 0, 0 }
251
252 func f3() {
253 T.meth(k())
254
255 }
256
257 func small1() {
258 runtime.GC()
259 }
260 func small2() int {
261 return runtime.GOMAXPROCS(0)
262 }
263 func small3(t T) {
264 t.meth2(3, 5)
265 }
266 func small4(t T) {
267 t.meth2(runtime.GOMAXPROCS(0), 5)
268 }
269 func (T) meth2(int, int) {
270 runtime.GC()
271 runtime.GC()
272 }
273
274
275 func ee() {
276 ff(100)
277 }
278
279 func ff(x int) {
280 if x < 0 {
281 return
282 }
283 gg(x - 1)
284 }
285 func gg(x int) {
286 hh(x - 1)
287 }
288 func hh(x int) {
289 ff(x - 1)
290 }
291
292
293 func for1(fn func() bool) {
294 for {
295 if fn() {
296 break
297 } else {
298 continue
299 }
300 }
301 }
302
303 func for2(fn func() bool) {
304 Loop:
305 for {
306 if fn() {
307 break Loop
308 } else {
309 continue Loop
310 }
311 }
312 }
313
314
315 type T1 struct{}
316
317 func (a T1) meth(val int) int {
318 return val + 5
319 }
320
321 func getMeth(t1 T1) func(int) int {
322 return t1.meth
323
324 }
325
326 func ii() {
327 var t1 T1
328 f := getMeth(t1)
329 _ = f(3)
330 }
331
332
333
334 func gd1(int) {
335 defer gd1(gd2())
336 defer gd3()()
337 go gd1(gd2())
338 go gd3()()
339 }
340
341 func gd2() int {
342 return 1
343 }
344
345 func gd3() func() {
346 return ii
347 }
348
349
350 func EncodeQuad(d []uint32, x [6]float32) {
351 _ = d[:6]
352 d[0] = float32bits(x[0])
353 d[1] = float32bits(x[1])
354 d[2] = float32bits(x[2])
355 d[3] = float32bits(x[3])
356 d[4] = float32bits(x[4])
357 d[5] = float32bits(x[5])
358 }
359
360
361
362 func float32bits(f float32) uint32 {
363 return *(*uint32)(unsafe.Pointer(&f))
364 }
365
366
367 func Conv(v uint64) uint64 {
368 return conv2(conv2(conv2(v)))
369 }
370 func conv2(v uint64) uint64 {
371 return conv1(conv1(conv1(conv1(v))))
372 }
373 func conv1(v uint64) uint64 {
374 return uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(uint64(v)))))))))))
375 }
376
377 func select1(x, y chan bool) int {
378 select {
379 case <-x:
380 return 1
381 case <-y:
382 return 2
383 }
384 }
385
386 func select2(x, y chan bool) {
387 loop:
388 select {
389 case <-x:
390 break loop
391 case <-y:
392 }
393 }
394
395 func inlineSelect2(x, y chan bool) {
396 loop:
397 for i := 0; i < 5; i++ {
398 if i == 3 {
399 break loop
400 }
401 select2(x, y)
402 }
403 }
404
405
406
407 func issue62211(x bool) {
408 if issue62211F(x) {
409 }
410 if issue62211G(x) {
411 }
412
413
414
415 if z := 0; false {
416 panic(z)
417 }
418 }
419
420 func issue62211F(x bool) bool {
421 if x || true {
422 return true
423 }
424 return true
425 }
426
427 func issue62211G(x bool) bool {
428 if x || true {
429 return true
430 } else {
431 return true
432 }
433 }
434
View as plain text