https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93806
--- Comment #4 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> --- (In reply to Richard Biener from comment #3) > with -funsafe-math-optimizations you get the 1 + x != 1 -> x != 0 > optimization which is unsafe because a rounding step is removed. > But you asked for that. So no "wrong-code" here, just another case > of "instabilities" or how you call that via conditional equivalence > propagation. I disagree. -funsafe-math-optimizations just means that floating-point expressions can be rearranged at the source level according to math rules (valid in the real numbers), thus changing how rounding is done. From that, an integer variable will always be stable (and IMHO, this should also be the case of a floating-point variable to avoid some consistency issues, perhaps unless you design a specific model with multivalued FP variables that would change them to a stable value once the variable is used to obtain a non-FP value). This option does not mean that the optimizer may assume that math rules are valid on floating point. Otherwise one can prove that 1 == 0 (as seen above), and then it is valid to transform the program to int main () { return 0; } Indeed, you can assume an "if (1)" around the main code, and since 1 == 0, you can transform it to "if (0)", and since this is always false, you can remove the code entirely. This makes no sense!