[gcc r9-9007] Fix PR97439

Andreas Krebbel krebbel@gcc.gnu.org
Thu Oct 22 10:43:42 GMT 2020


https://gcc.gnu.org/g:a07af7753004e711d0db8d4e5620a4e8afc8f10c

commit r9-9007-ga07af7753004e711d0db8d4e5620a4e8afc8f10c
Author: Andreas Krebbel <krebbel@linux.ibm.com>
Date:   Thu Oct 22 12:24:22 2020 +0200

    Fix PR97439
    
    decimal_real_maxval misses to set the sign flag in the REAL_VALUE_TYPE.
    
    gcc/ChangeLog:
    
            PR rtl-optimization/97439
            * dfp.c (decimal_real_maxval): Set the sign flag in the
            generated number.
    
    gcc/testsuite/ChangeLog:
    
            * gcc.dg/dfp/pr97439.c: New test.
    
    (cherry picked from commit e3f25eac67aee77af0b2038cd4d6cbd36d7f1030)

Diff:
---
 gcc/dfp.c                          |  2 ++
 gcc/testsuite/gcc.dg/dfp/pr97439.c | 27 +++++++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/gcc/dfp.c b/gcc/dfp.c
index 599f37ea9da..25a79c4df8a 100644
--- a/gcc/dfp.c
+++ b/gcc/dfp.c
@@ -740,4 +740,6 @@ decimal_real_maxval (REAL_VALUE_TYPE *r, int sign, machine_mode mode)
   decimal_real_from_string (r, max);
   if (sign)
     decimal128SetSign ((decimal128 *) r->sig, 1);
+
+  r->sign = sign;
 }
diff --git a/gcc/testsuite/gcc.dg/dfp/pr97439.c b/gcc/testsuite/gcc.dg/dfp/pr97439.c
new file mode 100644
index 00000000000..7fcf834043c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/pr97439.c
@@ -0,0 +1,27 @@
+// { dg-do run }
+// { dg-options "-O1" }
+
+static int
+foo(_Decimal128 x, _Decimal128 y)
+{
+  if (x > y)
+    return 1;
+
+  return 0;
+}
+
+int __attribute__((noinline))
+bar(_Decimal128 x)
+{
+  return foo (x, -1.0DL * __builtin_infd32());
+}
+
+int
+main (void)
+{
+  int res = bar (0.0DL);
+  if (res != 1)
+    __builtin_abort ();
+
+  return 0;
+}


More information about the Gcc-cvs mailing list