]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add testcase for #24876
authorGiovanni Bajo <rasky@develer.com>
Sun, 15 Apr 2018 21:52:12 +0000 (23:52 +0200)
committerGiovanni Bajo <rasky@develer.com>
Sun, 2 Sep 2018 10:34:51 +0000 (10:34 +0000)
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>

test/checkbce.go

index 430dcf9cbc285bc259672d1b97754d812fa6b210..0a2842f10c0b8dcf1dee72a7bdc2117989bdc1fb 100644 (file)
@@ -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) {
 }