https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95118

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
           Keywords|                            |compile-time-hog
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
             Status|UNCONFIRMED                 |ASSIGNED
   Target Milestone|---                         |10.2
            Summary|gcc-10 and master -O3       |[10/11 Regression] gcc-10
                   |-fopt-info-vec causes gcc   |and master -O3
                   |to hang                     |-fopt-info-vec causes gcc
                   |                            |to hang
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2020-05-14
      Known to work|                            |9.3.0

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
On the GCC 10 branch I see it not returning from

(gdb) fin
Run till exit from #0  0x000000000107148d in real_to_decimal_for_mode (
    str=0x7fffffffcd60 "\200", r_orig=0x7fffffffcd40, buf_size=100, digits=57, 
    crop_trailing_zeros=1, mode=E_VOIDmode)
    at /space/rguenther/src/gcc-10-branch/gcc/real.c:1718

we're in this loop:

      while (1)
        {
          /* Stop if we'd shift bits off the bottom.  */
          if (v.sig[0] & 7)
            break;

          do_multiply (&u, &v, ten);

          /* Stop if we're now >= 1.  */
          if (REAL_EXP (&u) > 0)
            break;

          v = u;
          dec_exp -= 1;
        }

(gdb) p u
$1 = {cl = 0, decimal = 0, sign = 0, signalling = 0, canonical = 0, uexp = 0, 
  sig = {0, 0, 0}}

and the original REAL_VALUE_TYPE is

(gdb) p *r_orig
$4 = {cl = 1, decimal = 0, sign = 0, signalling = 0, canonical = 0, 
  uexp = 67092486, sig = {0, 0, 0}}

so it's simply a weird not normalized constant zero ...

I have a patch to paper over this in real_to_decimal_for_mode which then
prints

  a (0.0e-8191);

for the specific number.

Reply via email to