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]; ...