Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(251)

Delta Between Two Patch Sets: test/fixedbugs/issue2615.go

Issue 6847078: code review 6847078: cmd/gc: do not overflow parser stack on a long chain of... (Closed)
Left Patch Set: Created 11 years, 4 months ago
Right Patch Set: diff -r d1f2902e0f0d https://go.googlecode.com/hg/ Created 11 years, 3 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « src/cmd/gc/yerr.h ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
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
10 package main
11
12 // test returns the index of the lowest set bit in a 256-bit vector.
13 func 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
530 func 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 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b