Source file test/fixedbugs/issue2615.go

     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  

View as plain text