diff --git a/test/checkbce.go b/test/checkbce.go index 0a2842f10c..770c4c2a94 100644 --- a/test/checkbce.go +++ b/test/checkbce.go @@ -10,8 +10,6 @@ package main -import "encoding/binary" - func f0(a []int) { a[0] = 1 // ERROR "Found IsInBounds$" a[0] = 1 @@ -144,12 +142,18 @@ func g4(a [100]int) { } } +func Uint64(b []byte) uint64 { + _ = b[7] // ERROR "Found IsInBounds$" + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + func decode1(data []byte) (x uint64) { for len(data) >= 32 { - x += binary.BigEndian.Uint64(data[:8]) - x += binary.BigEndian.Uint64(data[8:16]) - x += binary.BigEndian.Uint64(data[16:24]) - x += binary.BigEndian.Uint64(data[24:32]) + x += Uint64(data[:8]) + x += Uint64(data[8:16]) + x += Uint64(data[16:24]) + x += Uint64(data[24:32]) data = data[32:] } return x @@ -159,13 +163,13 @@ func decode2(data []byte) (x uint64) { // TODO(rasky): this should behave like decode1 and compile to no // boundchecks. We're currently not able to remove all of them. for len(data) >= 32 { - x += binary.BigEndian.Uint64(data) + x += Uint64(data) data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += Uint64(data) // ERROR "Found IsInBounds$" data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += Uint64(data) // ERROR "Found IsInBounds$" data = data[8:] - x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$" + x += Uint64(data) // ERROR "Found IsInBounds$" data = data[8:] } return x