Bug 78608 - gimple-ssa-sprintf.c:570:17: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int' points out an integer overflow bug in the pass caught by ubsan. The bug was due to negating a number without checking for equality to INT_MIN. In addition, my recent change to fix 78521 introduced a call to abs() that broke the Solaris bootstrap: https://gcc.gnu.org/ml/gcc-patches/2016-12/msg00161.html While fixing these two problems I noticed that the rest of the pass wasn't handling the corner case of a width with the value of INT_MIN specified via an argument to the asterisk, such as in: int n = snprintf(0, 0, "%*i", INT_MIN, 0); This is undefined behavior because negative width is supposed to be treated as the left justification flag followed by a positive width (thus resulting in INT_MAX + 1 bytes). This problem affected all integer and floating point directives. Finally, while there, I decided to include in information messages a bit of detail about ranges of floating point values that was missing. I did this to help answer questions like those raised earlier this week by Gerald here ("where does the 317 come from?): https://gcc.gnu.org/ml/gcc/2016-11/msg00102.html The attached patch adjusts the pass to handle these problems. Martin