diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-02-15 13:19:53 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-02-15 13:19:53 +0100 |
commit | fa8db6eaf2d95fc77b96c5eeb36813175dd9ab97 (patch) | |
tree | 3f8ebd7be7f60835ddf58ed0bbd54e084348f355 /gcc | |
parent | a0003c78ac75f2c14ce8a3eff488e3aca7a9692e (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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/real.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/dfp/pr79487.c | 16 |
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; +} |