aboutsummaryrefslogtreecommitdiff
path: root/test/checkbce.go
diff options
context:
space:
mode:
authorGiovanni Bajo <rasky@develer.com>2018-04-15 23:52:12 +0200
committerGiovanni Bajo <rasky@develer.com>2018-09-02 10:34:51 +0000
commitdd5e9b32ff60f99f993953a74e39d505914c6a56 (patch)
treefe71161d947c16e8e7916cbd6d0e6b408f9a34b3 /test/checkbce.go
parentf02cc88f46e01c21e550dbf212aefcdad138a91d (diff)
downloadgo-dd5e9b32ff60f99f993953a74e39d505914c6a56.tar.gz
go-dd5e9b32ff60f99f993953a74e39d505914c6a56.zip
cmd/compile: add testcase for #24876
This is still not fixed, the testcase reflects that there are still a few boundchecks. Let's fix the good alternative with an explicit test though. Updates #24876 Change-Id: I4da35eb353e19052bd7b69ea6190a69ced8b9b3d Reviewed-on: https://go-review.googlesource.com/107355 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Giovanni Bajo <rasky@develer.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'test/checkbce.go')
-rw-r--r--test/checkbce.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/checkbce.go b/test/checkbce.go
index 430dcf9cbc..0a2842f10c 100644
--- a/test/checkbce.go
+++ b/test/checkbce.go
@@ -10,6 +10,8 @@
package main
+import "encoding/binary"
+
func f0(a []int) {
a[0] = 1 // ERROR "Found IsInBounds$"
a[0] = 1
@@ -142,6 +144,33 @@ func g4(a [100]int) {
}
}
+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])
+ data = data[32:]
+ }
+ return x
+}
+
+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)
+ data = data[8:]
+ x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$"
+ data = data[8:]
+ x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$"
+ data = data[8:]
+ x += binary.BigEndian.Uint64(data) // ERROR "Found IsInBounds$"
+ data = data[8:]
+ }
+ return x
+}
+
//go:noinline
func useInt(a int) {
}