1 // errorcheck -0 -d=ssa/late_fuse/debug=1
3 //go:build (amd64 && !gcflags_noopt) || (arm64 && !gcflags_noopt)
5 // Copyright 2021 The Go Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style
7 // license that can be found in the LICENSE file.
15 func fEqEq(a int, f float64) bool {
16 return a == 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq64 based on Eq64$"
19 func fEqNeq(a int32, f float64) bool {
20 return a == 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq32 based on Eq32$"
23 func fEqLess(a int8, f float64) bool {
24 return a == 0 && f > Cf2 || a < 0 && f < -Cf2
27 func fEqLeq(a float64, f float64) bool {
28 return a == 0 && f > Cf2 || a <= 0 && f < -Cf2
31 func fEqLessU(a uint, f float64) bool {
32 return a == 0 && f > Cf2 || a < 0 && f < -Cf2
35 func fEqLeqU(a uint64, f float64) bool {
36 return a == 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq64U based on Eq64$"
39 func fNeqEq(a int, f float64) bool {
40 return a != 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq64 based on Neq64$"
43 func fNeqNeq(a int32, f float64) bool {
44 return a != 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq32 based on Neq32$"
47 func fNeqLess(a float32, f float64) bool {
48 // TODO: Add support for floating point numbers in prove
49 return a != 0 && f > Cf2 || a < 0 && f < -Cf2
52 func fNeqLeq(a int16, f float64) bool {
53 return a != 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq16 based on Neq16$"
56 func fNeqLessU(a uint, f float64) bool {
57 return a != 0 && f > Cf2 || a < 0 && f < -Cf2
60 func fNeqLeqU(a uint32, f float64) bool {
61 return a != 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq32U based on Neq32$"
64 func fLessEq(a int, f float64) bool {
65 return a < 0 && f > Cf2 || a == 0 && f < -Cf2
68 func fLessNeq(a int32, f float64) bool {
69 return a < 0 && f > Cf2 || a != 0 && f < -Cf2
72 func fLessLess(a float32, f float64) bool {
73 return a < 0 && f > Cf2 || a < 0 && f < -Cf2 // ERROR "Redirect Less32F based on Less32F$"
76 func fLessLeq(a float64, f float64) bool {
77 return a < 0 && f > Cf2 || a <= 0 && f < -Cf2
80 func fLeqEq(a float64, f float64) bool {
81 return a <= 0 && f > Cf2 || a == 0 && f < -Cf2
84 func fLeqNeq(a int16, f float64) bool {
85 return a <= 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq16 based on Leq16$"
88 func fLeqLess(a float32, f float64) bool {
89 return a <= 0 && f > Cf2 || a < 0 && f < -Cf2
92 func fLeqLeq(a int8, f float64) bool {
93 return a <= 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq8 based on Leq8$"
96 func fLessUEq(a uint8, f float64) bool {
97 return a < 0 && f > Cf2 || a == 0 && f < -Cf2
100 func fLessUNeq(a uint16, f float64) bool {
101 return a < 0 && f > Cf2 || a != 0 && f < -Cf2
104 func fLessULessU(a uint32, f float64) bool {
105 return a < 0 && f > Cf2 || a < 0 && f < -Cf2
108 func fLessULeqU(a uint64, f float64) bool {
109 return a < 0 && f > Cf2 || a <= 0 && f < -Cf2
112 func fLeqUEq(a uint8, f float64) bool {
113 return a <= 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq8 based on Leq8U$"
116 func fLeqUNeq(a uint16, f float64) bool {
117 return a <= 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq16 based on Leq16U$"
120 func fLeqLessU(a uint32, f float64) bool {
121 return a <= 0 && f > Cf2 || a < 0 && f < -Cf2
124 func fLeqLeqU(a uint64, f float64) bool {
125 return a <= 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq64U based on Leq64U$"
128 // Arg tests are disabled because the op name is different on amd64 and arm64.
130 func fEqPtrEqPtr(a, b *int, f float64) bool {
131 return a == b && f > Cf2 || a == b && f < -Cf2 // ERROR "Redirect EqPtr based on EqPtr$"
134 func fEqPtrNeqPtr(a, b *int, f float64) bool {
135 return a == b && f > Cf2 || a != b && f < -Cf2 // ERROR "Redirect NeqPtr based on EqPtr$"
138 func fNeqPtrEqPtr(a, b *int, f float64) bool {
139 return a != b && f > Cf2 || a == b && f < -Cf2 // ERROR "Redirect EqPtr based on NeqPtr$"
142 func fNeqPtrNeqPtr(a, b *int, f float64) bool {
143 return a != b && f > Cf2 || a != b && f < -Cf2 // ERROR "Redirect NeqPtr based on NeqPtr$"
146 func fEqInterEqInter(a interface{}, f float64) bool {
147 return a == nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
150 func fEqInterNeqInter(a interface{}, f float64) bool {
151 return a == nil && f > Cf2 || a != nil && f < -Cf2
154 func fNeqInterEqInter(a interface{}, f float64) bool {
155 return a != nil && f > Cf2 || a == nil && f < -Cf2
158 func fNeqInterNeqInter(a interface{}, f float64) bool {
159 return a != nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
162 func fEqSliceEqSlice(a []int, f float64) bool {
163 return a == nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
166 func fEqSliceNeqSlice(a []int, f float64) bool {
167 return a == nil && f > Cf2 || a != nil && f < -Cf2
170 func fNeqSliceEqSlice(a []int, f float64) bool {
171 return a != nil && f > Cf2 || a == nil && f < -Cf2
174 func fNeqSliceNeqSlice(a []int, f float64) bool {
175 return a != nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
178 func fPhi(a, b string) string {
179 aslash := strings.HasSuffix(a, "/") // ERROR "Redirect Phi based on Phi$"
180 bslash := strings.HasPrefix(b, "/")
182 case aslash && bslash:
184 case !aslash && !bslash: