https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126637
--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Aldy Hernandez <[email protected]>: https://gcc.gnu.org/g:b9c9f9350ca8cb8d0a59cb99b5e48f6f7328adc6 commit r17-3038-gb9c9f9350ca8cb8d0a59cb99b5e48f6f7328adc6 Author: Aldy Hernandez <[email protected]> Date: Thu Aug 6 07:01:38 2026 +0000 Handle sub-ranges in frange == and != operators [PR126637] When the operands do not intersect, == and != still allow equality if each range holds a zero of opposite sign, hence -0.0 == 0.0. The check for this looked at the hull endpoints, ignoring the inner sub-range boundaries. With sub-ranges the zero can be inner, e.g. [-1.0, -0.0][1.0, 1.0] with hull [-1.0, 1.0], so it was missed and e.g. "e != 0.0" folded to true. Tested on ppc64le Linux: regstrap and LAPACK. PR tree-optimization/126637 gcc/ChangeLog: * range-op-float.cc (operator_equal::fold_range): Use the contains_zero_p method to detect a contained zero instead of inspecting the hull endpoints. (operator_not_equal::fold_range): Likewise. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr126637.c: New test.
