3
// Copyright 2012 The Go Authors. All rights reserved.
4
// Use of this source code is governed by a BSD-style
5
// license that can be found in the LICENSE file.
7
// Issue 2615: a long chain of else if's causes an overflow
8
// in the parser stack.
12
// test returns the index of the lowest set bit in a 256-bit vector.
13
func test(x [4]uint64) int {
16
} else if x[0]&(1<<1) != 0 {
18
} else if x[0]&(1<<2) != 0 {
20
} else if x[0]&(1<<3) != 0 {
22
} else if x[0]&(1<<4) != 0 {
24
} else if x[0]&(1<<5) != 0 {
26
} else if x[0]&(1<<6) != 0 {
28
} else if x[0]&(1<<7) != 0 {
30
} else if x[0]&(1<<8) != 0 {
32
} else if x[0]&(1<<9) != 0 {
34
} else if x[0]&(1<<10) != 0 {
36
} else if x[0]&(1<<11) != 0 {
38
} else if x[0]&(1<<12) != 0 {
40
} else if x[0]&(1<<13) != 0 {
42
} else if x[0]&(1<<14) != 0 {
44
} else if x[0]&(1<<15) != 0 {
46
} else if x[0]&(1<<16) != 0 {
48
} else if x[0]&(1<<17) != 0 {
50
} else if x[0]&(1<<18) != 0 {
52
} else if x[0]&(1<<19) != 0 {
54
} else if x[0]&(1<<20) != 0 {
56
} else if x[0]&(1<<21) != 0 {
58
} else if x[0]&(1<<22) != 0 {
60
} else if x[0]&(1<<23) != 0 {
62
} else if x[0]&(1<<24) != 0 {
64
} else if x[0]&(1<<25) != 0 {
66
} else if x[0]&(1<<26) != 0 {
68
} else if x[0]&(1<<27) != 0 {
70
} else if x[0]&(1<<28) != 0 {
72
} else if x[0]&(1<<29) != 0 {
74
} else if x[0]&(1<<30) != 0 {
76
} else if x[0]&(1<<31) != 0 {
78
} else if x[0]&(1<<32) != 0 {
80
} else if x[0]&(1<<33) != 0 {
82
} else if x[0]&(1<<34) != 0 {
84
} else if x[0]&(1<<35) != 0 {
86
} else if x[0]&(1<<36) != 0 {
88
} else if x[0]&(1<<37) != 0 {
90
} else if x[0]&(1<<38) != 0 {
92
} else if x[0]&(1<<39) != 0 {
94
} else if x[0]&(1<<40) != 0 {
96
} else if x[0]&(1<<41) != 0 {
98
} else if x[0]&(1<<42) != 0 {
100
} else if x[0]&(1<<43) != 0 {
102
} else if x[0]&(1<<44) != 0 {
104
} else if x[0]&(1<<45) != 0 {
106
} else if x[0]&(1<<46) != 0 {
108
} else if x[0]&(1<<47) != 0 {
110
} else if x[0]&(1<<48) != 0 {
112
} else if x[0]&(1<<49) != 0 {
114
} else if x[0]&(1<<50) != 0 {
116
} else if x[0]&(1<<51) != 0 {
118
} else if x[0]&(1<<52) != 0 {
120
} else if x[0]&(1<<53) != 0 {
122
} else if x[0]&(1<<54) != 0 {
124
} else if x[0]&(1<<55) != 0 {
126
} else if x[0]&(1<<56) != 0 {
128
} else if x[0]&(1<<57) != 0 {
130
} else if x[0]&(1<<58) != 0 {
132
} else if x[0]&(1<<59) != 0 {
134
} else if x[0]&(1<<60) != 0 {
136
} else if x[0]&(1<<61) != 0 {
138
} else if x[0]&(1<<62) != 0 {
140
} else if x[0]&(1<<63) != 0 {
142
} else if x[1]&(1<<0) != 0 {
144
} else if x[1]&(1<<1) != 0 {
146
} else if x[1]&(1<<2) != 0 {
148
} else if x[1]&(1<<3) != 0 {
150
} else if x[1]&(1<<4) != 0 {
152
} else if x[1]&(1<<5) != 0 {
154
} else if x[1]&(1<<6) != 0 {
156
} else if x[1]&(1<<7) != 0 {
158
} else if x[1]&(1<<8) != 0 {
160
} else if x[1]&(1<<9) != 0 {
162
} else if x[1]&(1<<10) != 0 {
164
} else if x[1]&(1<<11) != 0 {
166
} else if x[1]&(1<<12) != 0 {
168
} else if x[1]&(1<<13) != 0 {
170
} else if x[1]&(1<<14) != 0 {
172
} else if x[1]&(1<<15) != 0 {
174
} else if x[1]&(1<<16) != 0 {
176
} else if x[1]&(1<<17) != 0 {
178
} else if x[1]&(1<<18) != 0 {
180
} else if x[1]&(1<<19) != 0 {
182
} else if x[1]&(1<<20) != 0 {
184
} else if x[1]&(1<<21) != 0 {
186
} else if x[1]&(1<<22) != 0 {
188
} else if x[1]&(1<<23) != 0 {
190
} else if x[1]&(1<<24) != 0 {
192
} else if x[1]&(1<<25) != 0 {
194
} else if x[1]&(1<<26) != 0 {
196
} else if x[1]&(1<<27) != 0 {
198
} else if x[1]&(1<<28) != 0 {
200
} else if x[1]&(1<<29) != 0 {
202
} else if x[1]&(1<<30) != 0 {
204
} else if x[1]&(1<<31) != 0 {
206
} else if x[1]&(1<<32) != 0 {
208
} else if x[1]&(1<<33) != 0 {
210
} else if x[1]&(1<<34) != 0 {
212
} else if x[1]&(1<<35) != 0 {
214
} else if x[1]&(1<<36) != 0 {
216
} else if x[1]&(1<<37) != 0 {
218
} else if x[1]&(1<<38) != 0 {
220
} else if x[1]&(1<<39) != 0 {
222
} else if x[1]&(1<<40) != 0 {
224
} else if x[1]&(1<<41) != 0 {
226
} else if x[1]&(1<<42) != 0 {
228
} else if x[1]&(1<<43) != 0 {
230
} else if x[1]&(1<<44) != 0 {
232
} else if x[1]&(1<<45) != 0 {
234
} else if x[1]&(1<<46) != 0 {
236
} else if x[1]&(1<<47) != 0 {
238
} else if x[1]&(1<<48) != 0 {
240
} else if x[1]&(1<<49) != 0 {
242
} else if x[1]&(1<<50) != 0 {
244
} else if x[1]&(1<<51) != 0 {
246
} else if x[1]&(1<<52) != 0 {
248
} else if x[1]&(1<<53) != 0 {
250
} else if x[1]&(1<<54) != 0 {
252
} else if x[1]&(1<<55) != 0 {
254
} else if x[1]&(1<<56) != 0 {
256
} else if x[1]&(1<<57) != 0 {
258
} else if x[1]&(1<<58) != 0 {
260
} else if x[1]&(1<<59) != 0 {
262
} else if x[1]&(1<<60) != 0 {
264
} else if x[1]&(1<<61) != 0 {
266
} else if x[1]&(1<<62) != 0 {
268
} else if x[1]&(1<<63) != 0 {
270
} else if x[2]&(1<<0) != 0 {
272
} else if x[2]&(1<<1) != 0 {
274
} else if x[2]&(1<<2) != 0 {
276
} else if x[2]&(1<<3) != 0 {
278
} else if x[2]&(1<<4) != 0 {
280
} else if x[2]&(1<<5) != 0 {
282
} else if x[2]&(1<<6) != 0 {
284
} else if x[2]&(1<<7) != 0 {
286
} else if x[2]&(1<<8) != 0 {
288
} else if x[2]&(1<<9) != 0 {
290
} else if x[2]&(1<<10) != 0 {
292
} else if x[2]&(1<<11) != 0 {
294
} else if x[2]&(1<<12) != 0 {
296
} else if x[2]&(1<<13) != 0 {
298
} else if x[2]&(1<<14) != 0 {
300
} else if x[2]&(1<<15) != 0 {
302
} else if x[2]&(1<<16) != 0 {
304
} else if x[2]&(1<<17) != 0 {
306
} else if x[2]&(1<<18) != 0 {
308
} else if x[2]&(1<<19) != 0 {
310
} else if x[2]&(1<<20) != 0 {
312
} else if x[2]&(1<<21) != 0 {
314
} else if x[2]&(1<<22) != 0 {
316
} else if x[2]&(1<<23) != 0 {
318
} else if x[2]&(1<<24) != 0 {
320
} else if x[2]&(1<<25) != 0 {
322
} else if x[2]&(1<<26) != 0 {
324
} else if x[2]&(1<<27) != 0 {
326
} else if x[2]&(1<<28) != 0 {
328
} else if x[2]&(1<<29) != 0 {
330
} else if x[2]&(1<<30) != 0 {
332
} else if x[2]&(1<<31) != 0 {
334
} else if x[2]&(1<<32) != 0 {
336
} else if x[2]&(1<<33) != 0 {
338
} else if x[2]&(1<<34) != 0 {
340
} else if x[2]&(1<<35) != 0 {
342
} else if x[2]&(1<<36) != 0 {
344
} else if x[2]&(1<<37) != 0 {
346
} else if x[2]&(1<<38) != 0 {
348
} else if x[2]&(1<<39) != 0 {
350
} else if x[2]&(1<<40) != 0 {
352
} else if x[2]&(1<<41) != 0 {
354
} else if x[2]&(1<<42) != 0 {
356
} else if x[2]&(1<<43) != 0 {
358
} else if x[2]&(1<<44) != 0 {
360
} else if x[2]&(1<<45) != 0 {
362
} else if x[2]&(1<<46) != 0 {
364
} else if x[2]&(1<<47) != 0 {
366
} else if x[2]&(1<<48) != 0 {
368
} else if x[2]&(1<<49) != 0 {
370
} else if x[2]&(1<<50) != 0 {
372
} else if x[2]&(1<<51) != 0 {
374
} else if x[2]&(1<<52) != 0 {
376
} else if x[2]&(1<<53) != 0 {
378
} else if x[2]&(1<<54) != 0 {
380
} else if x[2]&(1<<55) != 0 {
382
} else if x[2]&(1<<56) != 0 {
384
} else if x[2]&(1<<57) != 0 {
386
} else if x[2]&(1<<58) != 0 {
388
} else if x[2]&(1<<59) != 0 {
390
} else if x[2]&(1<<60) != 0 {
392
} else if x[2]&(1<<61) != 0 {
394
} else if x[2]&(1<<62) != 0 {
396
} else if x[2]&(1<<63) != 0 {
398
} else if x[3]&(1<<0) != 0 {
400
} else if x[3]&(1<<1) != 0 {
402
} else if x[3]&(1<<2) != 0 {
404
} else if x[3]&(1<<3) != 0 {
406
} else if x[3]&(1<<4) != 0 {
408
} else if x[3]&(1<<5) != 0 {
410
} else if x[3]&(1<<6) != 0 {
412
} else if x[3]&(1<<7) != 0 {
414
} else if x[3]&(1<<8) != 0 {
416
} else if x[3]&(1<<9) != 0 {
418
} else if x[3]&(1<<10) != 0 {
420
} else if x[3]&(1<<11) != 0 {
422
} else if x[3]&(1<<12) != 0 {
424
} else if x[3]&(1<<13) != 0 {
426
} else if x[3]&(1<<14) != 0 {
428
} else if x[3]&(1<<15) != 0 {
430
} else if x[3]&(1<<16) != 0 {
432
} else if x[3]&(1<<17) != 0 {
434
} else if x[3]&(1<<18) != 0 {
436
} else if x[3]&(1<<19) != 0 {
438
} else if x[3]&(1<<20) != 0 {
440
} else if x[3]&(1<<21) != 0 {
442
} else if x[3]&(1<<22) != 0 {
444
} else if x[3]&(1<<23) != 0 {
446
} else if x[3]&(1<<24) != 0 {
448
} else if x[3]&(1<<25) != 0 {
450
} else if x[3]&(1<<26) != 0 {
452
} else if x[3]&(1<<27) != 0 {
454
} else if x[3]&(1<<28) != 0 {
456
} else if x[3]&(1<<29) != 0 {
458
} else if x[3]&(1<<30) != 0 {
460
} else if x[3]&(1<<31) != 0 {
462
} else if x[3]&(1<<32) != 0 {
464
} else if x[3]&(1<<33) != 0 {
466
} else if x[3]&(1<<34) != 0 {
468
} else if x[3]&(1<<35) != 0 {
470
} else if x[3]&(1<<36) != 0 {
472
} else if x[3]&(1<<37) != 0 {
474
} else if x[3]&(1<<38) != 0 {
476
} else if x[3]&(1<<39) != 0 {
478
} else if x[3]&(1<<40) != 0 {
480
} else if x[3]&(1<<41) != 0 {
482
} else if x[3]&(1<<42) != 0 {
484
} else if x[3]&(1<<43) != 0 {
486
} else if x[3]&(1<<44) != 0 {
488
} else if x[3]&(1<<45) != 0 {
490
} else if x[3]&(1<<46) != 0 {
492
} else if x[3]&(1<<47) != 0 {
494
} else if x[3]&(1<<48) != 0 {
496
} else if x[3]&(1<<49) != 0 {
498
} else if x[3]&(1<<50) != 0 {
500
} else if x[3]&(1<<51) != 0 {
502
} else if x[3]&(1<<52) != 0 {
504
} else if x[3]&(1<<53) != 0 {
506
} else if x[3]&(1<<54) != 0 {
508
} else if x[3]&(1<<55) != 0 {
510
} else if x[3]&(1<<56) != 0 {
512
} else if x[3]&(1<<57) != 0 {
514
} else if x[3]&(1<<58) != 0 {
516
} else if x[3]&(1<<59) != 0 {
518
} else if x[3]&(1<<60) != 0 {
520
} else if x[3]&(1<<61) != 0 {
522
} else if x[3]&(1<<62) != 0 {
524
} else if x[3]&(1<<63) != 0 {
531
const ones = ^uint64(0)
532
for i := 0; i < 256; i++ {
533
bits := [4]uint64{ones, ones, ones, ones}
535
// clear bottom i bits
536
bits[i/64] ^= 1<<(uint(i)&63) - 1
537
for j := i/64 - 1; j >= 0; j-- {
543
print("test(bits)=", k, " want ", i, "\n")