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.
+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.
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;
+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.
--- /dev/null
+/* { 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);
+}