summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-02-15 13:19:53 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-02-15 13:19:53 +0100
commitfa8db6eaf2d95fc77b96c5eeb36813175dd9ab97 (patch)
tree3f8ebd7be7f60835ddf58ed0bbd54e084348f355 /gcc
parenta0003c78ac75f2c14ce8a3eff488e3aca7a9692e (diff)
re PR target/79487 (Invalid _Decimal32 comparison on s390x)
PR target/79487 * real.c (real_from_integer): Call real_convert even for decimal. * gcc.dg/dfp/pr79487.c: New test. * c-c++-common/ubsan/float-cast-overflow-8.c (TEST): Revert 2017-02-13 change. From-SVN: r245477
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/real.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c4
-rw-r--r--gcc/testsuite/gcc.dg/dfp/pr79487.c16
5 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b87c8a559b..7466dab1274 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/79487
+ * real.c (real_from_integer): Call real_convert even for decimal.
+
2017-02-15 Dominik Vogt <vogt@linux.vnet.ibm.com>
PR target/79421
diff --git a/gcc/real.c b/gcc/real.c
index 5f2b573078a..97452a9701e 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -2266,7 +2266,7 @@ real_from_integer (REAL_VALUE_TYPE *r, format_helper fmt,
if (fmt.decimal_p ())
decimal_from_integer (r);
- else if (fmt)
+ if (fmt)
real_convert (r, fmt, r);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index db52ab93282..a379d2ab6b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2017-02-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/79487
+ * gcc.dg/dfp/pr79487.c: New test.
+ * c-c++-common/ubsan/float-cast-overflow-8.c (TEST): Revert
+ 2017-02-13 change.
+
2017-01-14 Carl Love <cel@us.ibm.com>
* gcc.target/powerpc/vsx-builtin-3.c: Add missing test case for the
diff --git a/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c b/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c
index 1b51609cf07..4adb22ae3b4 100644
--- a/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c
+++ b/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c
@@ -8,7 +8,7 @@
#define TEST(type1, type2) \
if (type1##_MIN) \
{ \
- volatile type2 min = type1##_MIN; \
+ type2 min = type1##_MIN; \
type2 add = -1.0; \
while (1) \
{ \
@@ -28,7 +28,7 @@
volatile type1 tem3 = cvt_##type1##_##type2 (-1.0f); \
} \
{ \
- volatile type2 max = type1##_MAX; \
+ type2 max = type1##_MAX; \
type2 add = 1.0; \
while (1) \
{ \
diff --git a/gcc/testsuite/gcc.dg/dfp/pr79487.c b/gcc/testsuite/gcc.dg/dfp/pr79487.c
new file mode 100644
index 00000000000..f76ddeeac37
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/pr79487.c
@@ -0,0 +1,16 @@
+/* PR target/79487 */
+/* { dg-options "-O2" } */
+
+int
+main ()
+{
+ _Decimal32 a = (-9223372036854775807LL - 1LL);
+ _Decimal32 b = -9.223372E+18DF;
+ if (b - a != 0.0DF)
+ __builtin_abort ();
+ _Decimal64 c = (-9223372036854775807LL - 1LL);
+ _Decimal64 d = -9.223372036854776E+18DD;
+ if (d - c != 0.0DD)
+ __builtin_abort ();
+ return 0;
+}