- Notifications
You must be signed in to change notification settings - Fork67
Open
Description
Affected rules
DIR-4-15
\
Description
The first implementation of the rule handles guards of the formisinf
,isnan
,isfinite
,iszero
, etc., however, it doesn't support guards relating tofpclassify()
.
Example
floatmay_be_inf() { ...return1.0/0.0;}voidfpclassify_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; } }