diff options
Diffstat (limited to '')
-rw-r--r-- | test/fixedbugs/issue2615.go | 547 |
1 files changed, 547 insertions, 0 deletions
diff --git a/test/fixedbugs/issue2615.go b/test/fixedbugs/issue2615.go new file mode 100644 index 0000000..831110e --- /dev/null +++ b/test/fixedbugs/issue2615.go @@ -0,0 +1,547 @@ +// 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") + } + } +} |