mirror of
https://github.com/golang/go
synced 2024-11-11 19:51:37 -07:00
test: fix bcecheck test on noopt builder
The noopt builder is configured by setting GO_GCFLAGS=-N -l, but the test/run.go test harness doesn't look at GO_GCFLAGS when processing "errorcheck" files, it just calls compile: cmdline := []string{goTool(), "tool", "compile", /* etc */} This is working as intended, since it makes the tests more robust and independent from the environment; errorcheck files are supposed to set additional building flags, when needed, like in: // errorcheck -0 -N -l The test/bcecheck.go test used to work on the noopt builder (even if bce is not active on -N -l) because the test was auto-contained and the file always compiled with optimizations enabled. In CL 107355, a new bce test dependent on an external package (encoding.binary) was added. On the noopt builder the external package is built using -N -l, and this causes a test failure that broke the noopt builder: https://build.golang.org/log/b2be319536285e5807ee9d66d6d0ec4d57433768 To reproduce the failure, one can do: $ go install -a -gcflags="-N -l" std $ go run run.go -- checkbce.go This change fixes the noopt builder breakage by removing the bce test dependency on encoding/binary by defining a local Uint64() function to be used in the test. Change-Id: Ife71aab662001442e715c32a0b7d758349a63ff1 Reviewed-on: https://go-review.googlesource.com/136855 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
3ff28f7d71
commit
6054fef17f
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user