https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107569
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Before the 1281 // Then add the negative of each pair: 1282 // ABS(op1) = [5,20] would yield op1 => [-20,-5][5,20]. 1283 r.union_ (frange (type, 1284 real_value_negate (&positives.upper_bound ()), 1285 real_value_negate (&positives.lower_bound ()))); part r is [frange] double [0.0 (0x0.0p+0), 1.79769313486231570814527423731704356798070567525844996599e+308 (0x0.fffffffffffff8p+1024)] so that is still ok. So perhaps we need to clear_nan on the newly created frange for the negative part (or, if r is a maybe nan make sure it has varying bit and if it is not nan, not be in there).