// run // Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Issue 2615: a long chain of else if's causes an overflow // in the parser stack. package main // test returns the index of the lowest set bit in a 256-bit vector. func test(x [4]uint64) int { if x[0]&(1<<0) != 0 { return 0 } else if x[0]&(1<<1) != 0 { return 1 } else if x[0]&(1<<2) != 0 { return 2 } else if x[0]&(1<<3) != 0 { return 3 } else if x[0]&(1<<4) != 0 { return 4 } else if x[0]&(1<<5) != 0 { return 5 } else if x[0]&(1<<6) != 0 { return 6 } else if x[0]&(1<<7) != 0 { return 7 } else if x[0]&(1<<8) != 0 { return 8 } else if x[0]&(1<<9) != 0 { return 9 } else if x[0]&(1<<10) != 0 { return 10 } else if x[0]&(1<<11) != 0 { return 11 } else if x[0]&(1<<12) != 0 { return 12 } else if x[0]&(1<<13) != 0 { return 13 } else if x[0]&(1<<14) != 0 { return 14 } else if x[0]&(1<<15) != 0 { return 15 } else if x[0]&(1<<16) != 0 { return 16 } else if x[0]&(1<<17) != 0 { return 17 } else if x[0]&(1<<18) != 0 { return 18 } else if x[0]&(1<<19) != 0 { return 19 } else if x[0]&(1<<20) != 0 { return 20 } else if x[0]&(1<<21) != 0 { return 21 } else if x[0]&(1<<22) != 0 { return 22 } else if x[0]&(1<<23) != 0 { return 23 } else if x[0]&(1<<24) != 0 { return 24 } else if x[0]&(1<<25) != 0 { return 25 } else if x[0]&(1<<26) != 0 { return 26 } else if x[0]&(1<<27) != 0 { return 27 } else if x[0]&(1<<28) != 0 { return 28 } else if x[0]&(1<<29) != 0 { return 29 } else if x[0]&(1<<30) != 0 { return 30 } else if x[0]&(1<<31) != 0 { return 31 } else if x[0]&(1<<32) != 0 { return 32 } else if x[0]&(1<<33) != 0 { return 33 } else if x[0]&(1<<34) != 0 { return 34 } else if x[0]&(1<<35) != 0 { return 35 } else if x[0]&(1<<36) != 0 { return 36 } else if x[0]&(1<<37) != 0 { return 37 } else if x[0]&(1<<38) != 0 { return 38 } else if x[0]&(1<<39) != 0 { return 39 } else if x[0]&(1<<40) != 0 { return 40 } else if x[0]&(1<<41) != 0 { return 41 } else if x[0]&(1<<42) != 0 { return 42 } else if x[0]&(1<<43) != 0 { return 43 } else if x[0]&(1<<44) != 0 { return 44 } else if x[0]&(1<<45) != 0 { return 45 } else if x[0]&(1<<46) != 0 { return 46 } else if x[0]&(1<<47) != 0 { return 47 } else if x[0]&(1<<48) != 0 { return 48 } else if x[0]&(1<<49) != 0 { return 49 } else if x[0]&(1<<50) != 0 { return 50 } else if x[0]&(1<<51) != 0 { return 51 } else if x[0]&(1<<52) != 0 { return 52 } else if x[0]&(1<<53) != 0 { return 53 } else if x[0]&(1<<54) != 0 { return 54 } else if x[0]&(1<<55) != 0 { return 55 } else if x[0]&(1<<56) != 0 { return 56 } else if x[0]&(1<<57) != 0 { return 57 } else if x[0]&(1<<58) != 0 { return 58 } else if x[0]&(1<<59) != 0 { return 59 } else if x[0]&(1<<60) != 0 { return 60 } else if x[0]&(1<<61) != 0 { return 61 } else if x[0]&(1<<62) != 0 { return 62 } else if x[0]&(1<<63) != 0 { return 63 } else if x[1]&(1<<0) != 0 { return 64 } else if x[1]&(1<<1) != 0 { return 65 } else if x[1]&(1<<2) != 0 { return 66 } else if x[1]&(1<<3) != 0 { return 67 } else if x[1]&(1<<4) != 0 { return 68 } else if x[1]&(1<<5) != 0 { return 69 } else if x[1]&(1<<6) != 0 { return 70 } else if x[1]&(1<<7) != 0 { return 71 } else if x[1]&(1<<8) != 0 { return 72 } else if x[1]&(1<<9) != 0 { return 73 } else if x[1]&(1<<10) != 0 { return 74 } else if x[1]&(1<<11) != 0 { return 75 } else if x[1]&(1<<12) != 0 { return 76 } else if x[1]&(1<<13) != 0 { return 77 } else if x[1]&(1<<14) != 0 { return 78 } else if x[1]&(1<<15) != 0 { return 79 } else if x[1]&(1<<16) != 0 { return 80 } else if x[1]&(1<<17) != 0 { return 81 } else if x[1]&(1<<18) != 0 { return 82 } else if x[1]&(1<<19) != 0 { return 83 } else if x[1]&(1<<20) != 0 { return 84 } else if x[1]&(1<<21) != 0 { return 85 } else if x[1]&(1<<22) != 0 { return 86 } else if x[1]&(1<<23) != 0 { return 87 } else if x[1]&(1<<24) != 0 { return 88 } else if x[1]&(1<<25) != 0 { return 89 } else if x[1]&(1<<26) != 0 { return 90 } else if x[1]&(1<<27) != 0 { return 91 } else if x[1]&(1<<28) != 0 { return 92 } else if x[1]&(1<<29) != 0 { return 93 } else if x[1]&(1<<30) != 0 { return 94 } else if x[1]&(1<<31) != 0 { return 95 } else if x[1]&(1<<32) != 0 { return 96 } else if x[1]&(1<<33) != 0 { return 97 } else if x[1]&(1<<34) != 0 { return 98 } else if x[1]&(1<<35) != 0 { return 99 } else if x[1]&(1<<36) != 0 { return 100 } else if x[1]&(1<<37) != 0 { return 101 } else if x[1]&(1<<38) != 0 { return 102 } else if x[1]&(1<<39) != 0 { return 103 } else if x[1]&(1<<40) != 0 { return 104 } else if x[1]&(1<<41) != 0 { return 105 } else if x[1]&(1<<42) != 0 { return 106 } else if x[1]&(1<<43) != 0 { return 107 } else if x[1]&(1<<44) != 0 { return 108 } else if x[1]&(1<<45) != 0 { return 109 } else if x[1]&(1<<46) != 0 { return 110 } else if x[1]&(1<<47) != 0 { return 111 } else if x[1]&(1<<48) != 0 { return 112 } else if x[1]&(1<<49) != 0 { return 113 } else if x[1]&(1<<50) != 0 { return 114 } else if x[1]&(1<<51) != 0 { return 115 } else if x[1]&(1<<52) != 0 { return 116 } else if x[1]&(1<<53) != 0 { return 117 } else if x[1]&(1<<54) != 0 { return 118 } else if x[1]&(1<<55) != 0 { return 119 } else if x[1]&(1<<56) != 0 { return 120 } else if x[1]&(1<<57) != 0 { return 121 } else if x[1]&(1<<58) != 0 { return 122 } else if x[1]&(1<<59) != 0 { return 123 } else if x[1]&(1<<60) != 0 { return 124 } else if x[1]&(1<<61) != 0 { return 125 } else if x[1]&(1<<62) != 0 { return 126 } else if x[1]&(1<<63) != 0 { return 127 } else if x[2]&(1<<0) != 0 { return 128 } else if x[2]&(1<<1) != 0 { return 129 } else if x[2]&(1<<2) != 0 { return 130 } else if x[2]&(1<<3) != 0 { return 131 } else if x[2]&(1<<4) != 0 { return 132 } else if x[2]&(1<<5) != 0 { return 133 } else if x[2]&(1<<6) != 0 { return 134 } else if x[2]&(1<<7) != 0 { return 135 } else if x[2]&(1<<8) != 0 { return 136 } else if x[2]&(1<<9) != 0 { return 137 } else if x[2]&(1<<10) != 0 { return 138 } else if x[2]&(1<<11) != 0 { return 139 } else if x[2]&(1<<12) != 0 { return 140 } else if x[2]&(1<<13) != 0 { return 141 } else if x[2]&(1<<14) != 0 { return 142 } else if x[2]&(1<<15) != 0 { return 143 } else if x[2]&(1<<16) != 0 { return 144 } else if x[2]&(1<<17) != 0 { return 145 } else if x[2]&(1<<18) != 0 { return 146 } else if x[2]&(1<<19) != 0 { return 147 } else if x[2]&(1<<20) != 0 { return 148 } else if x[2]&(1<<21) != 0 { return 149 } else if x[2]&(1<<22) != 0 { return 150 } else if x[2]&(1<<23) != 0 { return 151 } else if x[2]&(1<<24) != 0 { return 152 } else if x[2]&(1<<25) != 0 { return 153 } else if x[2]&(1<<26) != 0 { return 154 } else if x[2]&(1<<27) != 0 { return 155 } else if x[2]&(1<<28) != 0 { return 156 } else if x[2]&(1<<29) != 0 { return 157 } else if x[2]&(1<<30) != 0 { return 158 } else if x[2]&(1<<31) != 0 { return 159 } else if x[2]&(1<<32) != 0 { return 160 } else if x[2]&(1<<33) != 0 { return 161 } else if x[2]&(1<<34) != 0 { return 162 } else if x[2]&(1<<35) != 0 { return 163 } else if x[2]&(1<<36) != 0 { return 164 } else if x[2]&(1<<37) != 0 { return 165 } else if x[2]&(1<<38) != 0 { return 166 } else if x[2]&(1<<39) != 0 { return 167 } else if x[2]&(1<<40) != 0 { return 168 } else if x[2]&(1<<41) != 0 { return 169 } else if x[2]&(1<<42) != 0 { return 170 } else if x[2]&(1<<43) != 0 { return 171 } else if x[2]&(1<<44) != 0 { return 172 } else if x[2]&(1<<45) != 0 { return 173 } else if x[2]&(1<<46) != 0 { return 174 } else if x[2]&(1<<47) != 0 { return 175 } else if x[2]&(1<<48) != 0 { return 176 } else if x[2]&(1<<49) != 0 { return 177 } else if x[2]&(1<<50) != 0 { return 178 } else if x[2]&(1<<51) != 0 { return 179 } else if x[2]&(1<<52) != 0 { return 180 } else if x[2]&(1<<53) != 0 { return 181 } else if x[2]&(1<<54) != 0 { return 182 } else if x[2]&(1<<55) != 0 { return 183 } else if x[2]&(1<<56) != 0 { return 184 } else if x[2]&(1<<57) != 0 { return 185 } else if x[2]&(1<<58) != 0 { return 186 } else if x[2]&(1<<59) != 0 { return 187 } else if x[2]&(1<<60) != 0 { return 188 } else if x[2]&(1<<61) != 0 { return 189 } else if x[2]&(1<<62) != 0 { return 190 } else if x[2]&(1<<63) != 0 { return 191 } else if x[3]&(1<<0) != 0 { return 192 } else if x[3]&(1<<1) != 0 { return 193 } else if x[3]&(1<<2) != 0 { return 194 } else if x[3]&(1<<3) != 0 { return 195 } else if x[3]&(1<<4) != 0 { return 196 } else if x[3]&(1<<5) != 0 { return 197 } else if x[3]&(1<<6) != 0 { return 198 } else if x[3]&(1<<7) != 0 { return 199 } else if x[3]&(1<<8) != 0 { return 200 } else if x[3]&(1<<9) != 0 { return 201 } else if x[3]&(1<<10) != 0 { return 202 } else if x[3]&(1<<11) != 0 { return 203 } else if x[3]&(1<<12) != 0 { return 204 } else if x[3]&(1<<13) != 0 { return 205 } else if x[3]&(1<<14) != 0 { return 206 } else if x[3]&(1<<15) != 0 { return 207 } else if x[3]&(1<<16) != 0 { return 208 } else if x[3]&(1<<17) != 0 { return 209 } else if x[3]&(1<<18) != 0 { return 210 } else if x[3]&(1<<19) != 0 { return 211 } else if x[3]&(1<<20) != 0 { return 212 } else if x[3]&(1<<21) != 0 { return 213 } else if x[3]&(1<<22) != 0 { return 214 } else if x[3]&(1<<23) != 0 { return 215 } else if x[3]&(1<<24) != 0 { return 216 } else if x[3]&(1<<25) != 0 { return 217 } else if x[3]&(1<<26) != 0 { return 218 } else if x[3]&(1<<27) != 0 { return 219 } else if x[3]&(1<<28) != 0 { return 220 } else if x[3]&(1<<29) != 0 { return 221 } else if x[3]&(1<<30) != 0 { return 222 } else if x[3]&(1<<31) != 0 { return 223 } else if x[3]&(1<<32) != 0 { return 224 } else if x[3]&(1<<33) != 0 { return 225 } else if x[3]&(1<<34) != 0 { return 226 } else if x[3]&(1<<35) != 0 { return 227 } else if x[3]&(1<<36) != 0 { return 228 } else if x[3]&(1<<37) != 0 { return 229 } else if x[3]&(1<<38) != 0 { return 230 } else if x[3]&(1<<39) != 0 { return 231 } else if x[3]&(1<<40) != 0 { return 232 } else if x[3]&(1<<41) != 0 { return 233 } else if x[3]&(1<<42) != 0 { return 234 } else if x[3]&(1<<43) != 0 { return 235 } else if x[3]&(1<<44) != 0 { return 236 } else if x[3]&(1<<45) != 0 { return 237 } else if x[3]&(1<<46) != 0 { return 238 } else if x[3]&(1<<47) != 0 { return 239 } else if x[3]&(1<<48) != 0 { return 240 } else if x[3]&(1<<49) != 0 { return 241 } else if x[3]&(1<<50) != 0 { return 242 } else if x[3]&(1<<51) != 0 { return 243 } else if x[3]&(1<<52) != 0 { return 244 } else if x[3]&(1<<53) != 0 { return 245 } else if x[3]&(1<<54) != 0 { return 246 } else if x[3]&(1<<55) != 0 { return 247 } else if x[3]&(1<<56) != 0 { return 248 } else if x[3]&(1<<57) != 0 { return 249 } else if x[3]&(1<<58) != 0 { return 250 } else if x[3]&(1<<59) != 0 { return 251 } else if x[3]&(1<<60) != 0 { return 252 } else if x[3]&(1<<61) != 0 { return 253 } else if x[3]&(1<<62) != 0 { return 254 } else if x[3]&(1<<63) != 0 { return 255 } return -1 } func main() { const ones = ^uint64(0) for i := 0; i < 256; i++ { bits := [4]uint64{ones, ones, ones, ones} // clear bottom i bits bits[i/64] ^= 1<<(uint(i)&63) - 1 for j := i/64 - 1; j >= 0; j-- { bits[j] = 0 } k := test(bits) if k != i { print("test(bits)=", k, " want ", i, "\n") panic("failed") } } }