diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2018-04-25 13:17:17 -0700 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2018-05-01 19:38:09 +0000 |
commit | 548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf (patch) | |
tree | c87c64f93b7a80677642e4b751c0e56cd9cb7349 /src/cmd/compile/internal/ssa/prove.go | |
parent | 31cfa7f2f2ec40715376aebfdddb8183f5a260dc (diff) | |
download | go-548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf.tar.gz go-548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf.zip |
cmd/compile: recognize some OpRsh64Ux64 Values as non-negative
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>
Diffstat (limited to 'src/cmd/compile/internal/ssa/prove.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/prove.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 03f657da8a..b30dab9fe3 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -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]) } |