On Wed, Sep 28, 2016 at 09:28:14PM +0200, Bernd Schmidt wrote: > On 09/28/2016 09:24 PM, Jakub Jelinek wrote: > >I'd like to ping the > > > >http://gcc.gnu.org/ml/gcc-patches/2016-09/msg01436.html > > > >patch, containing various fixes for gimple-ssa-sprintf.c. > >If the 0 < var to var > 0 changes are deemed too controversial, I can > >separate them from the other changes. > > I'd like to see them separated because they are obvious and good, so please > install them first.
Ok, so here is the separated patch I've installed: 2016-09-28 Jakub Jelinek <ja...@redhat.com> * gimple-ssa-sprintf.c: Fix comment formatting. (format_integer): Use is_gimple_assign. (pass_sprintf_length::handle_gimple_call): Use gimple_call_builtin_p and gimple_call_fndecl. Reorder case BUILT_IN_SPRINTF_CHK. Fix up BUILT_IN_SNPRINTF_CHK comment. Replace "to to" with "to" in comment. (pass_sprintf_length::execute): Use is_gimple_call. --- gcc/gimple-ssa-sprintf.c.jj 2016-09-21 08:54:15.000000000 +0200 +++ gcc/gimple-ssa-sprintf.c 2016-09-21 15:09:02.209261013 +0200 @@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. The pass handles all forms standard sprintf format directives, including character, integer, floating point, pointer, and strings, - with the standard C flags, widths, and precisions. For integers + with the standard C flags, widths, and precisions. For integers and strings it computes the length of output itself. For floating point it uses MPFR to fornmat known constants with up and down rounding and uses the resulting range of output lengths. For @@ -464,7 +464,7 @@ struct conversion_spec /* Format conversion function that given a conversion specification and an argument returns the formatting result. */ - fmtresult (*fmtfunc) (const conversion_spec &, tree); + fmtresult (*fmtfunc) (const conversion_spec &, tree); /* Return True when a the format flag CHR has been used. */ bool get_flag (char chr) const @@ -1032,10 +1032,10 @@ format_integer (const conversion_spec &s { /* The argument here may be the result of promoting the actual argument to int. Try to determine the type of the actual - argument before promotion and narrow down its range that + argument before promotion and narrow down its range that way. */ gimple *def = SSA_NAME_DEF_STMT (arg); - if (gimple_code (def) == GIMPLE_ASSIGN) + if (is_gimple_assign (def)) { tree_code code = gimple_assign_rhs_code (def); if (code == NOP_EXPR) @@ -2449,18 +2449,10 @@ pass_sprintf_length::handle_gimple_call call_info info = call_info (); info.callstmt = gsi_stmt (gsi); - info.func = gimple_call_fn (info.callstmt); - if (!info.func) - return; - - if (TREE_CODE (info.func) == ADDR_EXPR) - info.func = TREE_OPERAND (info.func, 0); - - if (TREE_CODE (info.func) != FUNCTION_DECL - || !DECL_BUILT_IN(info.func) - || DECL_BUILT_IN_CLASS (info.func) != BUILT_IN_NORMAL) + if (!gimple_call_builtin_p (info.callstmt, BUILT_IN_NORMAL)) return; + info.func = gimple_call_fndecl (info.callstmt); info.fncode = DECL_FUNCTION_CODE (info.func); /* The size of the destination as in snprintf(dest, size, ...). */ @@ -2487,6 +2479,14 @@ pass_sprintf_length::handle_gimple_call info.argidx = 2; break; + case BUILT_IN_SPRINTF_CHK: + // Signature: + // __builtin___sprintf_chk (dst, ost, objsize, format, ...) + idx_objsize = 2; + idx_format = 3; + info.argidx = 4; + break; + case BUILT_IN_SNPRINTF: // Signature: // __builtin_snprintf (dst, size, format, ...) @@ -2498,7 +2498,7 @@ pass_sprintf_length::handle_gimple_call case BUILT_IN_SNPRINTF_CHK: // Signature: - // __builtin___sprintf_chk (dst, size, ost, objsize, format, ...) + // __builtin___snprintf_chk (dst, size, ost, objsize, format, ...) idx_dstsize = 1; idx_objsize = 3; idx_format = 4; @@ -2506,14 +2506,6 @@ pass_sprintf_length::handle_gimple_call info.bounded = true; break; - case BUILT_IN_SPRINTF_CHK: - // Signature: - // __builtin___sprintf_chk (dst, ost, objsize, format, ...) - idx_objsize = 2; - idx_format = 3; - info.argidx = 4; - break; - case BUILT_IN_VSNPRINTF: // Signature: // __builtin_vsprintf (dst, size, format, va) @@ -2556,7 +2548,7 @@ pass_sprintf_length::handle_gimple_call if (idx_dstsize == HOST_WIDE_INT_M1U) { - // For non-bounded functions like sprintf, to to determine + // For non-bounded functions like sprintf, to determine // the size of the destination from the object or pointer // passed to it as the first argument. dstsize = get_destination_size (gimple_call_arg (info.callstmt, 0)); @@ -2667,7 +2660,7 @@ pass_sprintf_length::execute (function * /* Iterate over statements, looking for function calls. */ gimple *stmt = gsi_stmt (si); - if (gimple_code (stmt) == GIMPLE_CALL) + if (is_gimple_call (stmt)) handle_gimple_call (si); } } Jakub