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?