-
Notifications
You must be signed in to change notification settings - Fork 70
Open
@MichaelRFairhurst
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; } }