From: Andreas Krebbel Date: Thu, 22 Oct 2020 10:24:22 +0000 (+0200) Subject: Fix PR97439 X-Git-Tag: releases/gcc-10.3.0~727 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=523e6e5bd47bcc03e9782039b52fb3f8b3276e64;p=thirdparty%2Fgcc.git 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 --git a/gcc/dfp.c b/gcc/dfp.c index fef39a5ce399..4a0f68e5d836 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 000000000000..7fcf834043cb --- /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; +}