https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106967
--- Comment #12 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- (In reply to Richard Biener from comment #11) > Btw, > > static inline bool > finite_operands_p (const frange &op1, const frange &op2) > { > return flag_finite_math_only || (!op1.maybe_isnan () && !op2.maybe_isnan > ()); > } > > is wrong, you should either test HONOR_NANS on the range type or even > better, do this check in maybe_isnan (). Yeah, I need to revisit this. My patch still stands though, as we need to correctly handle definite NANs everywhere. I'll come back to finite_operands_p though. > > Btw, since you are "sanitizing" ranges at _set () time for other flag_*, > it might be good to simply do that for HONOR_NANS as well so we have a > single flag here and always ranges that do not need extra treatment? The problem here is that the NAN was explicitly set by a pass (i.e. it's in the IL). Although perhaps frange::set_nan() should just set UNDEFINED? Is that what you had in mind?