From: Wayne Zuo Date: Sun, 5 Jun 2022 05:22:29 +0000 (+0800) Subject: cmd/compile: teach prove about bitwise OR operation X-Git-Tag: go1.20rc1~1334 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3680b5e9c4f42fcf9155aa42b3b344d1fbe19571;p=gostls13.git cmd/compile: teach prove about bitwise OR operation Fixes #45928. Change-Id: Ifbb0effbca4ab7c0eb56069fee40edb564553c35 Reviewed-on: https://go-review.googlesource.com/c/go/+/410336 Reviewed-by: Cuong Manh Le Run-TryBot: Wayne Zuo Reviewed-by: David Chase Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot --- diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index cebadcb42c..20c967d098 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -842,6 +842,9 @@ func prove(f *Func) { case OpAnd64, OpAnd32, OpAnd16, OpAnd8: ft.update(b, v, v.Args[1], unsigned, lt|eq) ft.update(b, v, v.Args[0], unsigned, lt|eq) + case OpOr64, OpOr32, OpOr16, OpOr8: + ft.update(b, v, v.Args[1], unsigned, gt|eq) + ft.update(b, v, v.Args[0], unsigned, gt|eq) } } } diff --git a/test/prove.go b/test/prove.go index 5ccaff54ce..1be257f206 100644 --- a/test/prove.go +++ b/test/prove.go @@ -1053,6 +1053,11 @@ func issue51622(b []byte) int { return 0 } +func issue45928(x int) { + combinedFrac := (x) / (x | (1 << 31)) // ERROR "Proved Neq64$" + useInt(combinedFrac) +} + //go:noinline func useInt(a int) { }