https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79540
--- Comment #17 from John David Anglin <danglin at gcc dot gnu.org> --- 0x7adcb864 <build_float_string+2820>: cmpclr,> r21,r3,r0 0x7adcb868 <build_float_string+2824>: copy r21,r3 0x7adcb86c <build_float_string+2828>: stw r20,-8c(sp) 0x7adcb870 <build_float_string+2832>: stw r21,-90(sp) 0x7adcb874 <build_float_string+2836>: copy r19,r4 0x7adcb878 <build_float_string+2840>: copy r5,r25 0x7adcb87c <build_float_string+2844>: b,l 0x7adab298 <memcpy>,rp 0x7adcb880 <build_float_string+2848>: copy r3,r24 => 0x7adcb884 <build_float_string+2852>: add,l r6,r3,ret0 (gdb) p/x $r21 $12 = 0x1 (gdb) p nafter $13 = 1 (gdb) p ndigits No symbol "ndigits" in current context. (gdb) p/x $r3 $14 = 0xfffffffd The cmpclr does a signed compare between $r21 and $r3. The following instruction is nullified because $r21 > $r3. Presumably, $r3 is supposed to contain ndigits. /* Set digits after the decimal point, padding with zeros. */ if (nafter > 0) { if (nafter > ndigits) i = ndigits; else i = nafter; memcpy (put, digits, i); while (i < nafter) put[i++] = '0'; digits += i; ndigits -= i; put += nafter; }