mirror of
https://github.com/github/codeql.git
synced 2026-07-07 12:35:33 +02:00
Some files that will change in #1736 have been spared. ./build -j4 target/jars/qlformat find ql/cpp/ql -name "*.ql" -print0 | xargs -0 target/jars/qlformat --input find ql/cpp/ql -name "*.qll" -print0 | xargs -0 target/jars/qlformat --input (cd ql && git checkout 'cpp/ql/src/semmle/code/cpp/ir/implementation/**/*SSA*.qll') buildutils-internal/scripts/pr-checks/sync-identical-files.py --latest
25 lines
965 B
Plaintext
25 lines
965 B
Plaintext
/**
|
|
* @name Equality test on floating-point values
|
|
* @description Comparing results of floating-point computations with '==' or
|
|
* '!=' is likely to yield surprising results since floating-point
|
|
* computation does not follow the standard rules of algebra.
|
|
* @kind problem
|
|
* @problem.severity recommendation
|
|
* @precision high
|
|
* @id cpp/equality-on-floats
|
|
* @tags reliability
|
|
* correctness
|
|
*/
|
|
|
|
import cpp
|
|
|
|
from EqualityOperation ro, Expr left, Expr right
|
|
where
|
|
left = ro.getLeftOperand() and
|
|
right = ro.getRightOperand() and
|
|
ro.getAnOperand().getExplicitlyConverted().getType().getUnderlyingType() instanceof
|
|
FloatingPointType and
|
|
not ro.getAnOperand().isConstant() and // comparisons to constants generate too many false positives
|
|
not left.(VariableAccess).getTarget() = right.(VariableAccess).getTarget() // skip self comparison
|
|
select ro, "Equality test on floating point values may not behave as expected."
|