github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/test/fixedbugs/issue2615.go (about) 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 }