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

--- Comment #3 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Got a slightly nicer backtrace with debugging symbols:

(gdb) bt
#0  0x0000000000f70d7b in canonize (val=0x7fffffff9120, len=len@entry=0,
precision=precision@entry=576) at ../../source/gcc/wide-int.cc:96
#1  0x0000000000f71699 in wi::force_to_size (val=val@entry=0x7fffffff9120,
xval=xval@entry=0x7fffffffa320, xlen=<optimized out>,
    xprecision=<optimized out>, precision=precision@entry=576, sgn=<optimized
out>) at ../../source/gcc/wide-int.cc:400
#2  0x0000000000bd6c3d in fixed_wide_int_storage<576>::from (sgn=<optimized
out>, x=...) at ../../source/gcc/wide-int.h:1292

Looks like canonize() below has `val` of zero length:

  (gdb) print len
  $1 = 0
  (gdb) print val
  $2 = (long *) 0x7fffffff9120

static unsigned int
canonize (HOST_WIDE_INT *val, unsigned int len, unsigned int precision)
{
  unsigned int blocks_needed = BLOCKS_NEEDED (precision);
  HOST_WIDE_INT top;
  int i;

  if (len > blocks_needed)
    len = blocks_needed;

  if (len == 1)
    return len;

  top = val[len - 1];
  ...

Reply via email to