diff mbox series

Fix 89437, incorrect result for sinl ( atanl (x))

Message ID 20190221170035.myn3uyh54rhy7qcp@smtp.gmail.com
State New
Headers show
Series Fix 89437, incorrect result for sinl ( atanl (x)) | expand

Commit Message

Giuliano Belinassi Feb. 21, 2019, 5 p.m. UTC
A incorrect call to `nextafter` instead of `nextafterl` made the
test `sinatan-1.c` pass, when it should have failed. The cause of
the failure is pointed out in PR89437. This patch addresses
the cause of failure, as well the issue in the test.

gcc/ChangeLog:
2019-02-21  Giuliano Belinassi  <giuliano.belinassi@usp.br>

    PR tree-optimization/89437
    * match.pd (sin (atan (x))): Change 'le' to 'lt'.
    (cos (atan (x))): Likewise.


gcc/testsuite/gcc.dg/ChangeLog:
2019-02-21  Giuliano Belinassi  <giuliano.belinassi@usp.br>

    PR tree-optimization/89437
    * sinatan-1.c: Addressed incorrect `nextafter` call.
diff mbox series

Patch

Index: gcc/match.pd
===================================================================
--- gcc/match.pd	(revision 268655)
+++ gcc/match.pd	(working copy)
@@ -4407,7 +4407,7 @@ 
       tree t_one = build_one_cst (type);
      }
     (if (SCALAR_FLOAT_TYPE_P (type))
-     (cond (le (abs @0) { t_cst; })
+     (cond (lt (abs @0) { t_cst; })
       (rdiv @0 (sqrts (plus (mult @0 @0) { t_one; })))
       (copysigns { t_one; } @0))))))
 
@@ -4427,7 +4427,7 @@ 
       tree t_zero = build_zero_cst (type);
      }
     (if (SCALAR_FLOAT_TYPE_P (type))
-     (cond (le (abs @0) { t_cst; })
+     (cond (lt (abs @0) { t_cst; })
       (rdiv { t_one; } (sqrts (plus (mult @0 @0) { t_one; })))
       (copysigns { t_zero; } @0))))))
 
Index: gcc/testsuite/gcc.dg/sinatan-1.c
===================================================================
--- gcc/testsuite/gcc.dg/sinatan-1.c	(revision 268655)
+++ gcc/testsuite/gcc.dg/sinatan-1.c	(working copy)
@@ -62,7 +62,7 @@ 
     /* Get first x such that 1 + x*x will overflow */
     float fc = nextafterf (sqrtf (__FLT_MAX__ - 1), __FLT_MAX__);
     double c = nextafter (sqrt (__DBL_MAX__ - 1), __DBL_MAX__);
-    long double lc = nextafter (sqrtl (__LDBL_MAX__ - 1), __LDBL_MAX__);
+    long double lc = nextafterl (sqrtl (__LDBL_MAX__ - 1), __LDBL_MAX__);
 
     /*  Force move from FPU to memory, otherwise comparison may
         fail due to possible more accurate registers (see 387)  */
@@ -90,7 +90,7 @@ 
 
     if (fy != -1.f || y != -1. || ly != -1.L)
         abort ();
-    
+
     fy = cosatanf (-fc);
     y = cosatan (-c);
     ly = cosatanl (-lc);