Hi! The first hunk is I think rather obvious, -2147483648 should be printed as -2147483648 and doesn't need to introduce UB in the compiler while doing so. The changes to stabstr_D are analogous, but in addition to that I don't see why we should just strip away the upper bits, it is again just a string containing decimal digits. What that function implemented is that values from -4294967295 to 4294967295 were printed as expected and the rest had some bits lost and HOST_WIDE_INT signed minimum invoked UB.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2018-04-17 Jakub Jelinek <ja...@redhat.com> PR debug/84637 * dbxout.c (dbxout_int): Perform negation in unsigned int type. (stabstr_D): Change type of unum from unsigned int to unsigned HOST_WIDE_INT. Perform negation in unsigned HOST_WIDE_INT type. --- gcc/dbxout.c.jj 2018-01-18 21:11:58.613207125 +0100 +++ gcc/dbxout.c 2018-04-17 16:23:59.456993115 +0200 @@ -464,7 +464,7 @@ dbxout_int (int num) if (num < 0) { putc ('-', asm_out_file); - unum = -num; + unum = -(unsigned int) num; } else unum = num; @@ -671,7 +671,7 @@ stabstr_D (HOST_WIDE_INT num) { char buf[64]; char *p = buf + sizeof buf; - unsigned int unum; + unsigned HOST_WIDE_INT unum; if (num == 0) { @@ -681,7 +681,7 @@ stabstr_D (HOST_WIDE_INT num) if (num < 0) { stabstr_C ('-'); - unum = -num; + unum = -(unsigned HOST_WIDE_INT) num; } else unum = num; Jakub