]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2009-02-09 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Feb 2009 09:35:22 +0000 (09:35 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 9 Feb 2009 09:35:22 +0000 (09:35 +0000)
PR middle-end/35202
* convert.c (convert_to_real): Disable (float)fn((double)x)
to fnf(x) conversion if errno differences may occur and
-fmath-errno is set.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144030 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/convert.c

index 11c3612ee4ff61c35c68989542a3039faac297a1..a6deff996a4dac4f791b224b997f93e637fc7c08 100644 (file)
@@ -1,3 +1,10 @@
+2009-02-09  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/35202
+       * convert.c (convert_to_real): Disable (float)fn((double)x)
+       to fnf(x) conversion if errno differences may occur and
+       -fmath-errno is set.
+
 2009-02-07  Anatoly Sokolov  <aesok@post.ru>
 
        * config/avr/avr.c (avr_mcu_t): Add ata6289 device.
index 77907bafcb5e7e1fc799085179d1f3a236c47ca6..278305d8fdbc9b85592e2d11316898ec3ab1d493 100644 (file)
@@ -139,40 +139,45 @@ convert_to_real (tree type, tree expr)
       switch (fcode)
         {
 #define CASE_MATHFN(FN) case BUILT_IN_##FN: case BUILT_IN_##FN##L:
-         CASE_MATHFN (ACOS)
-         CASE_MATHFN (ACOSH)
-         CASE_MATHFN (ASIN)
-         CASE_MATHFN (ASINH)
-         CASE_MATHFN (ATAN)
-         CASE_MATHFN (ATANH)
-         CASE_MATHFN (CBRT)
-         CASE_MATHFN (COS)
          CASE_MATHFN (COSH)
-         CASE_MATHFN (ERF)
-         CASE_MATHFN (ERFC)
          CASE_MATHFN (EXP)
          CASE_MATHFN (EXP10)
          CASE_MATHFN (EXP2)
-         CASE_MATHFN (EXPM1)
-         CASE_MATHFN (FABS)
+         CASE_MATHFN (EXPM1)
          CASE_MATHFN (GAMMA)
          CASE_MATHFN (J0)
          CASE_MATHFN (J1)
          CASE_MATHFN (LGAMMA)
-         CASE_MATHFN (LOG)
-         CASE_MATHFN (LOG10)
-         CASE_MATHFN (LOG1P)
-         CASE_MATHFN (LOG2)
-         CASE_MATHFN (LOGB)
          CASE_MATHFN (POW10)
-         CASE_MATHFN (SIN)
          CASE_MATHFN (SINH)
-         CASE_MATHFN (SQRT)
-         CASE_MATHFN (TAN)
-         CASE_MATHFN (TANH)
          CASE_MATHFN (TGAMMA)
          CASE_MATHFN (Y0)
          CASE_MATHFN (Y1)
+           /* The above functions may set errno differently with float
+              input or output so this transformation is not safe with
+              -fmath-errno.  */
+           if (flag_errno_math)
+             break;
+         CASE_MATHFN (ACOS)
+         CASE_MATHFN (ACOSH)
+         CASE_MATHFN (ASIN)
+         CASE_MATHFN (ASINH)
+         CASE_MATHFN (ATAN)
+         CASE_MATHFN (ATANH)
+         CASE_MATHFN (CBRT)
+         CASE_MATHFN (COS)
+         CASE_MATHFN (ERF)
+         CASE_MATHFN (ERFC)
+         CASE_MATHFN (FABS)
+         CASE_MATHFN (LOG)
+         CASE_MATHFN (LOG10)
+         CASE_MATHFN (LOG2)
+         CASE_MATHFN (LOG1P)
+         CASE_MATHFN (LOGB)
+         CASE_MATHFN (SIN)
+         CASE_MATHFN (SQRT)
+         CASE_MATHFN (TAN)
+         CASE_MATHFN (TANH)
 #undef CASE_MATHFN
            {
              tree arg0 = strip_float_extensions (CALL_EXPR_ARG (expr, 0));