r251238 - in /trunk/gcc: c-family/ChangeLog c-f...

dmalcolm@gcc.gnu.org dmalcolm@gcc.gnu.org
Mon Aug 21 16:54:00 GMT 2017


Author: dmalcolm
Date: Mon Aug 21 16:53:10 2017
New Revision: 251238

URL: https://gcc.gnu.org/viewcvs?rev=251238&root=gcc&view=rev
Log:
c-family/c/c++: pass optional vec<location_t> to c-format.c

This patch passes along the vec<location_t> of argument locations
at a callsite from the C frontend to check_function_arguments and
from there to c-format.c, so that we can underline the pertinent
argument to mismatched format codes even for tree codes like decls
and constants which lack a location_t for their usage sites.

This takes e.g.:

    printf("hello %i %i %i ", foo, bar, baz);
                     ~^
                     %s

to:

    printf("hello %i %i %i ", foo, bar, baz);
                     ~^            ~~~
                     %s

which is useful for cases where there's more than one variadic argument.

gcc/c-family/ChangeLog:
	* c-common.c (check_function_arguments): Add "arglogs" param; pass
	it to check_function_format.
	* c-common.h (check_function_arguments): Add vec<location_t> *
	param.
	(check_function_format): Likewise.
	* c-format.c (struct format_check_context): Add field "arglocs".
	(check_function_format): Add param "arglocs"; pass it to
	check_format_info.
	(check_format_info):  Add param "arglocs"; use it to initialize
	new field of format_ctx.
	(check_format_arg): Pass format_ctx->arglocs to new param of
	check_format_info_main.
	(class argument_parser): New field "arglocs".
	(argument_parser::argument_parser): Add "arglocs_" param and use
	it to initialize new field.
	(argument_parser::check_argument_type): Pass new arglocs field to
	check_format_types.
	(check_format_info_main): Add param "arglocs", and use it when
	constructing arg_parser.
	(check_format_types): Add param "arglocs"; use it if non-NULL when
	!EXPR_HAS_LOCATION (cur_param) to get at location information.

gcc/c/ChangeLog:
	* c-typeck.c (build_function_call_vec): Pass arg_loc to call
	to check_function_arguments.

gcc/cp/ChangeLog:
	* call.c (build_over_call): Pass NULL for new parameter to
	check_function_arguments.
	* typeck.c (cp_build_function_call_vec): Likewise.

gcc/testsuite/ChangeLog:
	* gcc.dg/format/diagnostic-ranges.c: Update expected results
	to show underlining of all pertinent params.
	* gcc.dg/format/pr72858.c: Likewise.


Modified:
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c-common.c
    trunk/gcc/c-family/c-common.h
    trunk/gcc/c-family/c-format.c
    trunk/gcc/c/ChangeLog
    trunk/gcc/c/c-typeck.c
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/call.c
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/format/diagnostic-ranges.c
    trunk/gcc/testsuite/gcc.dg/format/pr72858.c



More information about the Gcc-cvs mailing list