1// run
2
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.
6
7// Issue 2615: a long chain of else if's causes an overflow
8// in the parser stack.
9
10package main
11
12// test returns the index of the lowest set bit in a 256-bit vector.
13func test(x [4]uint64) int {
14	if x[0]&(1<<0) != 0 {
15		return 0
16	} else if x[0]&(1<<1) != 0 {
17		return 1
18	} else if x[0]&(1<<2) != 0 {
19		return 2
20	} else if x[0]&(1<<3) != 0 {
21		return 3
22	} else if x[0]&(1<<4) != 0 {
23		return 4
24	} else if x[0]&(1<<5) != 0 {
25		return 5
26	} else if x[0]&(1<<6) != 0 {
27		return 6
28	} else if x[0]&(1<<7) != 0 {
29		return 7
30	} else if x[0]&(1<<8) != 0 {
31		return 8
32	} else if x[0]&(1<<9) != 0 {
33		return 9
34	} else if x[0]&(1<<10) != 0 {
35		return 10
36	} else if x[0]&(1<<11) != 0 {
37		return 11
38	} else if x[0]&(1<<12) != 0 {
39		return 12
40	} else if x[0]&(1<<13) != 0 {
41		return 13
42	} else if x[0]&(1<<14) != 0 {
43		return 14
44	} else if x[0]&(1<<15) != 0 {
45		return 15
46	} else if x[0]&(1<<16) != 0 {
47		return 16
48	} else if x[0]&(1<<17) != 0 {
49		return 17
50	} else if x[0]&(1<<18) != 0 {
51		return 18
52	} else if x[0]&(1<<19) != 0 {
53		return 19
54	} else if x[0]&(1<<20) != 0 {
55		return 20
56	} else if x[0]&(1<<21) != 0 {
57		return 21
58	} else if x[0]&(1<<22) != 0 {
59		return 22
60	} else if x[0]&(1<<23) != 0 {
61		return 23
62	} else if x[0]&(1<<24) != 0 {
63		return 24
64	} else if x[0]&(1<<25) != 0 {
65		return 25
66	} else if x[0]&(1<<26) != 0 {
67		return 26
68	} else if x[0]&(1<<27) != 0 {
69		return 27
70	} else if x[0]&(1<<28) != 0 {
71		return 28
72	} else if x[0]&(1<<29) != 0 {
73		return 29
74	} else if x[0]&(1<<30) != 0 {
75		return 30
76	} else if x[0]&(1<<31) != 0 {
77		return 31
78	} else if x[0]&(1<<32) != 0 {
79		return 32
80	} else if x[0]&(1<<33) != 0 {
81		return 33
82	} else if x[0]&(1<<34) != 0 {
83		return 34
84	} else if x[0]&(1<<35) != 0 {
85		return 35
86	} else if x[0]&(1<<36) != 0 {
87		return 36
88	} else if x[0]&(1<<37) != 0 {
89		return 37
90	} else if x[0]&(1<<38) != 0 {
91		return 38
92	} else if x[0]&(1<<39) != 0 {
93		return 39
94	} else if x[0]&(1<<40) != 0 {
95		return 40
96	} else if x[0]&(1<<41) != 0 {
97		return 41
98	} else if x[0]&(1<<42) != 0 {
99		return 42
100	} else if x[0]&(1<<43) != 0 {
101		return 43
102	} else if x[0]&(1<<44) != 0 {
103		return 44
104	} else if x[0]&(1<<45) != 0 {
105		return 45
106	} else if x[0]&(1<<46) != 0 {
107		return 46
108	} else if x[0]&(1<<47) != 0 {
109		return 47
110	} else if x[0]&(1<<48) != 0 {
111		return 48
112	} else if x[0]&(1<<49) != 0 {
113		return 49
114	} else if x[0]&(1<<50) != 0 {
115		return 50
116	} else if x[0]&(1<<51) != 0 {
117		return 51
118	} else if x[0]&(1<<52) != 0 {
119		return 52
120	} else if x[0]&(1<<53) != 0 {
121		return 53
122	} else if x[0]&(1<<54) != 0 {
123		return 54
124	} else if x[0]&(1<<55) != 0 {
125		return 55
126	} else if x[0]&(1<<56) != 0 {
127		return 56
128	} else if x[0]&(1<<57) != 0 {
129		return 57
130	} else if x[0]&(1<<58) != 0 {
131		return 58
132	} else if x[0]&(1<<59) != 0 {
133		return 59
134	} else if x[0]&(1<<60) != 0 {
135		return 60
136	} else if x[0]&(1<<61) != 0 {
137		return 61
138	} else if x[0]&(1<<62) != 0 {
139		return 62
140	} else if x[0]&(1<<63) != 0 {
141		return 63
142	} else if x[1]&(1<<0) != 0 {
143		return 64
144	} else if x[1]&(1<<1) != 0 {
145		return 65
146	} else if x[1]&(1<<2) != 0 {
147		return 66
148	} else if x[1]&(1<<3) != 0 {
149		return 67
150	} else if x[1]&(1<<4) != 0 {
151		return 68
152	} else if x[1]&(1<<5) != 0 {
153		return 69
154	} else if x[1]&(1<<6) != 0 {
155		return 70
156	} else if x[1]&(1<<7) != 0 {
157		return 71
158	} else if x[1]&(1<<8) != 0 {
159		return 72
160	} else if x[1]&(1<<9) != 0 {
161		return 73
162	} else if x[1]&(1<<10) != 0 {
163		return 74
164	} else if x[1]&(1<<11) != 0 {
165		return 75
166	} else if x[1]&(1<<12) != 0 {
167		return 76
168	} else if x[1]&(1<<13) != 0 {
169		return 77
170	} else if x[1]&(1<<14) != 0 {
171		return 78
172	} else if x[1]&(1<<15) != 0 {
173		return 79
174	} else if x[1]&(1<<16) != 0 {
175		return 80
176	} else if x[1]&(1<<17) != 0 {
177		return 81
178	} else if x[1]&(1<<18) != 0 {
179		return 82
180	} else if x[1]&(1<<19) != 0 {
181		return 83
182	} else if x[1]&(1<<20) != 0 {
183		return 84
184	} else if x[1]&(1<<21) != 0 {
185		return 85
186	} else if x[1]&(1<<22) != 0 {
187		return 86
188	} else if x[1]&(1<<23) != 0 {
189		return 87
190	} else if x[1]&(1<<24) != 0 {
191		return 88
192	} else if x[1]&(1<<25) != 0 {
193		return 89
194	} else if x[1]&(1<<26) != 0 {
195		return 90
196	} else if x[1]&(1<<27) != 0 {
197		return 91
198	} else if x[1]&(1<<28) != 0 {
199		return 92
200	} else if x[1]&(1<<29) != 0 {
201		return 93
202	} else if x[1]&(1<<30) != 0 {
203		return 94
204	} else if x[1]&(1<<31) != 0 {
205		return 95
206	} else if x[1]&(1<<32) != 0 {
207		return 96
208	} else if x[1]&(1<<33) != 0 {
209		return 97
210	} else if x[1]&(1<<34) != 0 {
211		return 98
212	} else if x[1]&(1<<35) != 0 {
213		return 99
214	} else if x[1]&(1<<36) != 0 {
215		return 100
216	} else if x[1]&(1<<37) != 0 {
217		return 101
218	} else if x[1]&(1<<38) != 0 {
219		return 102
220	} else if x[1]&(1<<39) != 0 {
221		return 103
222	} else if x[1]&(1<<40) != 0 {
223		return 104
224	} else if x[1]&(1<<41) != 0 {
225		return 105
226	} else if x[1]&(1<<42) != 0 {
227		return 106
228	} else if x[1]&(1<<43) != 0 {
229		return 107
230	} else if x[1]&(1<<44) != 0 {
231		return 108
232	} else if x[1]&(1<<45) != 0 {
233		return 109
234	} else if x[1]&(1<<46) != 0 {
235		return 110
236	} else if x[1]&(1<<47) != 0 {
237		return 111
238	} else if x[1]&(1<<48) != 0 {
239		return 112
240	} else if x[1]&(1<<49) != 0 {
241		return 113
242	} else if x[1]&(1<<50) != 0 {
243		return 114
244	} else if x[1]&(1<<51) != 0 {
245		return 115
246	} else if x[1]&(1<<52) != 0 {
247		return 116
248	} else if x[1]&(1<<53) != 0 {
249		return 117
250	} else if x[1]&(1<<54) != 0 {
251		return 118
252	} else if x[1]&(1<<55) != 0 {
253		return 119
254	} else if x[1]&(1<<56) != 0 {
255		return 120
256	} else if x[1]&(1<<57) != 0 {
257		return 121
258	} else if x[1]&(1<<58) != 0 {
259		return 122
260	} else if x[1]&(1<<59) != 0 {
261		return 123
262	} else if x[1]&(1<<60) != 0 {
263		return 124
264	} else if x[1]&(1<<61) != 0 {
265		return 125
266	} else if x[1]&(1<<62) != 0 {
267		return 126
268	} else if x[1]&(1<<63) != 0 {
269		return 127
270	} else if x[2]&(1<<0) != 0 {
271		return 128
272	} else if x[2]&(1<<1) != 0 {
273		return 129
274	} else if x[2]&(1<<2) != 0 {
275		return 130
276	} else if x[2]&(1<<3) != 0 {
277		return 131
278	} else if x[2]&(1<<4) != 0 {
279		return 132
280	} else if x[2]&(1<<5) != 0 {
281		return 133
282	} else if x[2]&(1<<6) != 0 {
283		return 134
284	} else if x[2]&(1<<7) != 0 {
285		return 135
286	} else if x[2]&(1<<8) != 0 {
287		return 136
288	} else if x[2]&(1<<9) != 0 {
289		return 137
290	} else if x[2]&(1<<10) != 0 {
291		return 138
292	} else if x[2]&(1<<11) != 0 {
293		return 139
294	} else if x[2]&(1<<12) != 0 {
295		return 140
296	} else if x[2]&(1<<13) != 0 {
297		return 141
298	} else if x[2]&(1<<14) != 0 {
299		return 142
300	} else if x[2]&(1<<15) != 0 {
301		return 143
302	} else if x[2]&(1<<16) != 0 {
303		return 144
304	} else if x[2]&(1<<17) != 0 {
305		return 145
306	} else if x[2]&(1<<18) != 0 {
307		return 146
308	} else if x[2]&(1<<19) != 0 {
309		return 147
310	} else if x[2]&(1<<20) != 0 {
311		return 148
312	} else if x[2]&(1<<21) != 0 {
313		return 149
314	} else if x[2]&(1<<22) != 0 {
315		return 150
316	} else if x[2]&(1<<23) != 0 {
317		return 151
318	} else if x[2]&(1<<24) != 0 {
319		return 152
320	} else if x[2]&(1<<25) != 0 {
321		return 153
322	} else if x[2]&(1<<26) != 0 {
323		return 154
324	} else if x[2]&(1<<27) != 0 {
325		return 155
326	} else if x[2]&(1<<28) != 0 {
327		return 156
328	} else if x[2]&(1<<29) != 0 {
329		return 157
330	} else if x[2]&(1<<30) != 0 {
331		return 158
332	} else if x[2]&(1<<31) != 0 {
333		return 159
334	} else if x[2]&(1<<32) != 0 {
335		return 160
336	} else if x[2]&(1<<33) != 0 {
337		return 161
338	} else if x[2]&(1<<34) != 0 {
339		return 162
340	} else if x[2]&(1<<35) != 0 {
341		return 163
342	} else if x[2]&(1<<36) != 0 {
343		return 164
344	} else if x[2]&(1<<37) != 0 {
345		return 165
346	} else if x[2]&(1<<38) != 0 {
347		return 166
348	} else if x[2]&(1<<39) != 0 {
349		return 167
350	} else if x[2]&(1<<40) != 0 {
351		return 168
352	} else if x[2]&(1<<41) != 0 {
353		return 169
354	} else if x[2]&(1<<42) != 0 {
355		return 170
356	} else if x[2]&(1<<43) != 0 {
357		return 171
358	} else if x[2]&(1<<44) != 0 {
359		return 172
360	} else if x[2]&(1<<45) != 0 {
361		return 173
362	} else if x[2]&(1<<46) != 0 {
363		return 174
364	} else if x[2]&(1<<47) != 0 {
365		return 175
366	} else if x[2]&(1<<48) != 0 {
367		return 176
368	} else if x[2]&(1<<49) != 0 {
369		return 177
370	} else if x[2]&(1<<50) != 0 {
371		return 178
372	} else if x[2]&(1<<51) != 0 {
373		return 179
374	} else if x[2]&(1<<52) != 0 {
375		return 180
376	} else if x[2]&(1<<53) != 0 {
377		return 181
378	} else if x[2]&(1<<54) != 0 {
379		return 182
380	} else if x[2]&(1<<55) != 0 {
381		return 183
382	} else if x[2]&(1<<56) != 0 {
383		return 184
384	} else if x[2]&(1<<57) != 0 {
385		return 185
386	} else if x[2]&(1<<58) != 0 {
387		return 186
388	} else if x[2]&(1<<59) != 0 {
389		return 187
390	} else if x[2]&(1<<60) != 0 {
391		return 188
392	} else if x[2]&(1<<61) != 0 {
393		return 189
394	} else if x[2]&(1<<62) != 0 {
395		return 190
396	} else if x[2]&(1<<63) != 0 {
397		return 191
398	} else if x[3]&(1<<0) != 0 {
399		return 192
400	} else if x[3]&(1<<1) != 0 {
401		return 193
402	} else if x[3]&(1<<2) != 0 {
403		return 194
404	} else if x[3]&(1<<3) != 0 {
405		return 195
406	} else if x[3]&(1<<4) != 0 {
407		return 196
408	} else if x[3]&(1<<5) != 0 {
409		return 197
410	} else if x[3]&(1<<6) != 0 {
411		return 198
412	} else if x[3]&(1<<7) != 0 {
413		return 199
414	} else if x[3]&(1<<8) != 0 {
415		return 200
416	} else if x[3]&(1<<9) != 0 {
417		return 201
418	} else if x[3]&(1<<10) != 0 {
419		return 202
420	} else if x[3]&(1<<11) != 0 {
421		return 203
422	} else if x[3]&(1<<12) != 0 {
423		return 204
424	} else if x[3]&(1<<13) != 0 {
425		return 205
426	} else if x[3]&(1<<14) != 0 {
427		return 206
428	} else if x[3]&(1<<15) != 0 {
429		return 207
430	} else if x[3]&(1<<16) != 0 {
431		return 208
432	} else if x[3]&(1<<17) != 0 {
433		return 209
434	} else if x[3]&(1<<18) != 0 {
435		return 210
436	} else if x[3]&(1<<19) != 0 {
437		return 211
438	} else if x[3]&(1<<20) != 0 {
439		return 212
440	} else if x[3]&(1<<21) != 0 {
441		return 213
442	} else if x[3]&(1<<22) != 0 {
443		return 214
444	} else if x[3]&(1<<23) != 0 {
445		return 215
446	} else if x[3]&(1<<24) != 0 {
447		return 216
448	} else if x[3]&(1<<25) != 0 {
449		return 217
450	} else if x[3]&(1<<26) != 0 {
451		return 218
452	} else if x[3]&(1<<27) != 0 {
453		return 219
454	} else if x[3]&(1<<28) != 0 {
455		return 220
456	} else if x[3]&(1<<29) != 0 {
457		return 221
458	} else if x[3]&(1<<30) != 0 {
459		return 222
460	} else if x[3]&(1<<31) != 0 {
461		return 223
462	} else if x[3]&(1<<32) != 0 {
463		return 224
464	} else if x[3]&(1<<33) != 0 {
465		return 225
466	} else if x[3]&(1<<34) != 0 {
467		return 226
468	} else if x[3]&(1<<35) != 0 {
469		return 227
470	} else if x[3]&(1<<36) != 0 {
471		return 228
472	} else if x[3]&(1<<37) != 0 {
473		return 229
474	} else if x[3]&(1<<38) != 0 {
475		return 230
476	} else if x[3]&(1<<39) != 0 {
477		return 231
478	} else if x[3]&(1<<40) != 0 {
479		return 232
480	} else if x[3]&(1<<41) != 0 {
481		return 233
482	} else if x[3]&(1<<42) != 0 {
483		return 234
484	} else if x[3]&(1<<43) != 0 {
485		return 235
486	} else if x[3]&(1<<44) != 0 {
487		return 236
488	} else if x[3]&(1<<45) != 0 {
489		return 237
490	} else if x[3]&(1<<46) != 0 {
491		return 238
492	} else if x[3]&(1<<47) != 0 {
493		return 239
494	} else if x[3]&(1<<48) != 0 {
495		return 240
496	} else if x[3]&(1<<49) != 0 {
497		return 241
498	} else if x[3]&(1<<50) != 0 {
499		return 242
500	} else if x[3]&(1<<51) != 0 {
501		return 243
502	} else if x[3]&(1<<52) != 0 {
503		return 244
504	} else if x[3]&(1<<53) != 0 {
505		return 245
506	} else if x[3]&(1<<54) != 0 {
507		return 246
508	} else if x[3]&(1<<55) != 0 {
509		return 247
510	} else if x[3]&(1<<56) != 0 {
511		return 248
512	} else if x[3]&(1<<57) != 0 {
513		return 249
514	} else if x[3]&(1<<58) != 0 {
515		return 250
516	} else if x[3]&(1<<59) != 0 {
517		return 251
518	} else if x[3]&(1<<60) != 0 {
519		return 252
520	} else if x[3]&(1<<61) != 0 {
521		return 253
522	} else if x[3]&(1<<62) != 0 {
523		return 254
524	} else if x[3]&(1<<63) != 0 {
525		return 255
526	}
527	return -1
528}
529
530func main() {
531	const ones = ^uint64(0)
532	for i := 0; i < 256; i++ {
533		bits := [4]uint64{ones, ones, ones, ones}
534
535		// clear bottom i bits
536		bits[i/64] ^= 1<<(uint(i)&63) - 1
537		for j := i/64 - 1; j >= 0; j-- {
538			bits[j] = 0
539		}
540
541		k := test(bits)
542		if k != i {
543			print("test(bits)=", k, " want ", i, "\n")
544			panic("failed")
545		}
546	}
547}
548