Committed to trunk in r86274.  Jakub/Richard, can you please
also review and approve the corresponding fix for the release
branches?

Martin

On 07/03/2018 06:32 PM, Jeff Law wrote:
On 07/03/2018 04:50 PM, Martin Sebor wrote:
In computing the size of expected output for non-constant floating
arguments the sprintf pass doesn't consider the possibility that
the argument value may be not finite (i.e., it can be infinity or
NaN).  Infinities and NaNs are formatted as "inf" or "infinity"
and "nan".  As a result, any floating directive can produce as
few bytes on output as three for an non-finite argument, when
the least amount directives such as %f produce for finite
arguments is 8.

The attached patch adjusts the floating point code to correctly
reflect the lower bound.

Martin

gcc-86274.diff


PR tree-optimization/86274 - SEGFAULT when logging std::to_string(NAN)

gcc/ChangeLog:

        PR tree-optimization/86274
        * gimple-ssa-sprintf.c (fmtresult::type_max_digits): Verify
        precondition.
        (format_floating): Correct handling of infinities and NaNs.

gcc/testsuite/ChangeLog:

        PR tree-optimization/86274
        * gcc.dg/tree-ssa/builtin-sprintf-9.c: New test.
        * gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Adjust.
        * gcc.dg/tree-ssa/builtin-sprintf-warn-10.c: Same.
        * gcc.dg/tree-ssa/builtin-sprintf-warn-15.c: Same.
        * gcc.dg/tree-ssa/builtin-sprintf-warn-7.c: Same.
        * gcc.dg/tree-ssa/builtin-sprintf.c: Same.
        * gcc.dg/tree-ssa/pr83198.c: Same.
OK
jeff


Reply via email to