https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109643
--- Comment #3 from Sergei Trofimovich ---
Got a slightly nicer backtrace with debugging symbols:
(gdb) bt
#0 0x00f70d7b in canonize (val=0x7fff9120, len=len@entry=0,
precision=precision@entry=576) at ../../source/gcc/wide-int.cc:96
#1 0x00f71699 in wi::force_to_size (val=val@entry=0x7fff9120,
xval=xval@entry=0x7fffa320, xlen=,
xprecision=, precision=precision@entry=576, sgn=) at ../../source/gcc/wide-int.cc:400
#2 0x00bd6c3d in fixed_wide_int_storage<576>::from (sgn=, 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 *) 0x7fff9120
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];
...