From: Giovanni Bajo Date: Sun, 15 Apr 2018 21:52:12 +0000 (+0200) Subject: cmd/compile: add testcase for #24876 X-Git-Tag: go1.12beta1~1186 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=dd5e9b32ff60f99f993953a74e39d505914c6a56;p=gostls13.git 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 Run-TryBot: Giovanni Bajo TryBot-Result: Gobot Gobot --- 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) { }