diff options
Diffstat (limited to 'test/fixedbugs/issue4448.go')
-rw-r--r-- | test/fixedbugs/issue4448.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/fixedbugs/issue4448.go b/test/fixedbugs/issue4448.go new file mode 100644 index 000000000..fa1d9fe49 --- /dev/null +++ b/test/fixedbugs/issue4448.go @@ -0,0 +1,37 @@ +// 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 4448: 64-bit indices that are statically known +// to be bounded make 5g and 8g generate a dangling branch. + +package main + +const b26 uint64 = 0x022fdd63cc95386d + +var bitPos [64]int + +func init() { + for p := uint(0); p < 64; p++ { + bitPos[b26<<p>>58] = int(p) + } +} + +func MinPos(w uint64) int { + if w == 0 { + panic("bit: MinPos(0) undefined") + } + return bitPos[((w&-w)*b26)>>58] +} + +func main() { + const one = uint64(1) + for i := 0; i < 64; i++ { + if MinPos(1<<uint(i)) != i { + println("i =", i) + panic("MinPos(1<<uint(i)) != i") + } + } +} |