middle-end/95118 - fix printing of denormal zero
This fixes printing a REAL_CST generated from value-numbering punning some bits to a real which turns out as zero with big negative exponent. This causes the loop in real_to_decimal_for_mode to never terminate. 2020-05-14 Richard Biener <rguenther@suse.de> PR middle-end/95118 * real.c (real_to_decimal_for_mode): Make sure we handle a zero with nonzero exponent. * gcc.dg/pr95118.c: New testcase.
This commit is contained in:
parent
7a50e70875
commit
568c985113
@ -1,3 +1,9 @@
|
||||
2020-05-14 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/95118
|
||||
* real.c (real_to_decimal_for_mode): Make sure we handle
|
||||
a zero with nonzero exponent.
|
||||
|
||||
2020-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* Makefile.in (GTFILES): Add omp-general.c.
|
||||
|
@ -1714,8 +1714,8 @@ real_to_decimal_for_mode (char *str, const REAL_VALUE_TYPE *r_orig,
|
||||
|
||||
do_multiply (&u, &v, ten);
|
||||
|
||||
/* Stop if we're now >= 1. */
|
||||
if (REAL_EXP (&u) > 0)
|
||||
/* Stop if we're now >= 1 or zero. */
|
||||
if (REAL_EXP (&u) > 0 || u.cl == rvc_zero)
|
||||
break;
|
||||
|
||||
v = u;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-05-14 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/95118
|
||||
* gcc.dg/pr95118.c: New testcase.
|
||||
|
||||
2020-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* c-c++-common/gomp/declare-variant-14.c: New test.
|
||||
|
11
gcc/testsuite/gcc.dg/pr95118.c
Normal file
11
gcc/testsuite/gcc.dg/pr95118.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-fre" } */
|
||||
|
||||
void a();
|
||||
void b() {
|
||||
union {
|
||||
int c[4];
|
||||
long double d;
|
||||
} e = {{0, 0, 4}};
|
||||
a(e.d);
|
||||
}
|
Loading…
Reference in New Issue
Block a user