]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: recognize some OpRsh64Ux64 Values as non-negative
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 25 Apr 2018 20:17:17 +0000 (13:17 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 1 May 2018 19:38:09 +0000 (19:38 +0000)
Proves IsSliceInBounds one additional time building std+cmd,
at encoding/hex/hex.go:187:8.

The code is:

if numAvail := len(d.in) / 2; len(p) > numAvail {
p = p[:numAvail]
}

Previously we were unable to prove that numAvail >= 0.

Change-Id: Ie74e0aef809f9194c45e129ee3dae60bc3eae02f
Reviewed-on: https://go-review.googlesource.com/109415
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Giovanni Bajo <rasky@develer.com>
src/cmd/compile/internal/ssa/prove.go

index 03f657da8a4397dc4e91bad5d62a8b0ba5abe9dc..b30dab9fe340679ea8154c54e3d941302b16ba15 100644 (file)
@@ -1068,6 +1068,10 @@ func isNonNegative(v *Value) bool {
                OpZeroExt8to64, OpZeroExt16to64, OpZeroExt32to64:
                return true
 
+       case OpRsh64Ux64:
+               by := v.Args[1]
+               return by.Op == OpConst64 && by.AuxInt > 0
+
        case OpRsh64x64:
                return isNonNegative(v.Args[0])
        }