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 4448: 64-bit indices that are statically known 8// to be bounded make 5g and 8g generate a dangling branch. 9 10package main 11 12const b26 uint64 = 0x022fdd63cc95386d 13 14var bitPos [64]int 15 16func init() { 17 for p := uint(0); p < 64; p++ { 18 bitPos[b26<<p>>58] = int(p) 19 } 20} 21 22func MinPos(w uint64) int { 23 if w == 0 { 24 panic("bit: MinPos(0) undefined") 25 } 26 return bitPos[((w&-w)*b26)>>58] 27} 28 29func main() { 30 const one = uint64(1) 31 for i := 0; i < 64; i++ { 32 if MinPos(1<<uint(i)) != i { 33 println("i =", i) 34 panic("MinPos(1<<uint(i)) != i") 35 } 36 } 37} 38