mirror of https://github.com/golang/go.git
38 lines
1.0 KiB
Go
38 lines
1.0 KiB
Go
// errorcheck -0 -d=ssa/prove/debug=1
|
|
|
|
//go:build amd64.v3 || arm64
|
|
|
|
// Copyright 2025 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// FIXME(@Jorropo): this file exists because I havn't yet bothered to
|
|
// make prove work on the pure go function call fallback.
|
|
// My idea was to wait until CL 637936 is merged, then we can always emit
|
|
// the PopCount SSA operation and translate them to pure function calls
|
|
// in late-opt.
|
|
|
|
package main
|
|
|
|
import "math/bits"
|
|
|
|
func onesCountsBounds(x uint64, ensureAllBranchesCouldHappen func() bool) int {
|
|
z := bits.OnesCount64(x)
|
|
if ensureAllBranchesCouldHappen() && z > 64 { // ERROR "Disproved Less64$"
|
|
return 42
|
|
}
|
|
if ensureAllBranchesCouldHappen() && z <= 64 { // ERROR "Proved Leq64$"
|
|
return 4242
|
|
}
|
|
if ensureAllBranchesCouldHappen() && z < 0 { // ERROR "Disproved Less64$"
|
|
return 424242
|
|
}
|
|
if ensureAllBranchesCouldHappen() && z >= 0 { // ERROR "Proved Leq64$"
|
|
return 42424242
|
|
}
|
|
return z
|
|
}
|
|
|
|
func main() {
|
|
}
|