Home | History | Annotate | Download | only in fixedbugs
      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 }
    548