diff options
author | Alberto Donizetti <alb.donizetti@gmail.com> | 2018-09-23 13:48:46 +0200 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2018-09-24 16:54:52 +0000 |
commit | 6054fef17f2eedf3ef4825b6ca5b97e2ecf53bd6 (patch) | |
tree | f6ef1b24a48f76181190db23b57a7ef25cb02af9 /test/checkbce.go | |
parent | 3ff28f7d7117713b684014cbf79e858180a45f5d (diff) | |
download | go-6054fef17f2eedf3ef4825b6ca5b97e2ecf53bd6.tar.gz go-6054fef17f2eedf3ef4825b6ca5b97e2ecf53bd6.zip |
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>
Diffstat (limited to 'test/checkbce.go')
-rw-r--r-- | test/checkbce.go | 24 |
1 files changed, 14 insertions, 10 deletions
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 |