------- Additional Comments From uros at kss-loka dot si 2005-01-14 06:37 ------- This comment was found in fold-const.c:
/* Try some transformations of A op B ? A : B. A == B? A : B same as B A != B? A : B same as A A >= B? A : B same as max (A, B) A > B? A : B same as max (B, A) A <= B? A : B same as min (A, B) A < B? A : B same as min (B, A) As above, these transformations don't work in the presence of signed zeros. For example, if A and B are zeros of opposite sign, the first two transformations will change the sign of the result. In the last four, the original expressions give different results for (A=+0, B=-0) and (A=-0, B=+0), but the transformed expressions do not. The first two transformations are correct if either A or B is a NaN. In the first transformation, the condition will be false, and B will indeed be chosen. In the case of the second transformation, the condition A != B will be true, and A will be chosen. The conversions to max() and min() are not correct if B is a number and A is not. The conditions in the original expressions will be false, so all four give B. The min() and max() versions would give a NaN instead. */ The testcase is ineed a bit unfortunate. I'll open an enhancement request regarding -ffast-math, as you suggested. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19250