-
Couldn't load subscription status.
- Fork 70
Open
Labels
Difficulty-LowA false positive or false negative report which is expected to take <1 day effort to addressA false positive or false negative report which is expected to take <1 day effort to addressImpact-Lowfalse positive/false negativeAn issue related to observed false positives or false negatives.An issue related to observed false positives or false negatives.
Description
Affected rules
DIR-4-15\
Description
The first implementation of the rule handles guards of the form isinf, isnan, isfinite, iszero, etc., however, it doesn't support guards relating to fpclassify().
Example
float may_be_inf() {
...
return 1.0/0.0;
}
void fpclassify_guard() {
float x = may_be_inf();
int y;
// error, casting possible infinity to int
y = x;
// example 1: easiest to support:
if (fpclassify(x) != FP_INFINITE) {
// or "fpclassify(x) == FP_NORMAL"
y = x;
}
// example 2: perhaps slightly harder to support, but guards library already has infra for this:
switch(x) {
case FP_NORMAL:
case FP_SUBNORMAL:
case FP_ZERO:
// or, "case FP_INFINITE: break; default:"
y = x;
}
// example 3: this is harder to support but a common pattern:
int cls = fpclassify(x);
if (cls != FP_INFINITE) {
// or "cls == FP_NORMAL || cls == FP_ZERO"
y = x;
}
}Metadata
Metadata
Assignees
Labels
Difficulty-LowA false positive or false negative report which is expected to take <1 day effort to addressA false positive or false negative report which is expected to take <1 day effort to addressImpact-Lowfalse positive/false negativeAn issue related to observed false positives or false negatives.An issue related to observed false positives or false negatives.