This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PR c/52952] More precise locations for Wformat


Hi,

This patch moves the location of various Wformat warnings from
pointing to the first character of the function name (such as printf)
to the actual format string. This is specially useful when you have
something like

printf (cond ? "format 1" : "format 2");

It also moves (some) of the warnings about too many arguments to the
first argument that is unused. Since the format string and/or the
arguments might not be expressions or strings, this doesn't always
work and then we are back to the status-quo.

This is anyway a first step. I have some patches to point within the
format string for some cases. This is why I added column markers to
testcases even if we don't actually improve the location: it  will
help us to identify testcases that need updating as the location info
improves.

Unfortunately, reaching the level of Clang seems well beyond the time
I can dedicate to this, so any help would be appreciated.

OK for trunk?


gcc/c-family/ChangeLog:

2014-08-15  Manuel López-Ibáñez  <manu.gnu.org>

    PR c/52952
    * c-format.c: Add extra_arg_loc and format_string_loc to struct
    format_check_results.
    (check_function_format): Use true and add comment for boolean
    argument.
    (finish_dollar_format_checking): Use explicit location when warning.
    (check_format_info): Likewise.
    (check_format_arg): Set extra_arg_loc and format_string_loc.
    (check_format_info_main): Use explicit location when warning.
    (check_format_types): Pass explicit location.
    (format_type_warning): Likewise.

gcc/testsuite/ChangeLog:

2014-08-15  Manuel López-Ibáñez  <manu.gnu.org>

    PR c/52952
    * gcc.dg/redecl-4.c: Add column markers.
    * gcc.dg/format/bitfld-1.c: Likewise.
    * gcc.dg/format/attr-2.c: Likewise.
    * gcc.dg/format/attr-6.c: Likewise.
    * gcc.dg/format/array-1.c: Likewise.
    * gcc.dg/format/attr-7.c: Likewise.
    * gcc.dg/format/asm_fprintf-1.c: Likewise.
    * gcc.dg/format/attr-4.c: Likewise.
    * gcc.dg/format/branch-1.c: Likewise.
    * gcc.dg/format/c90-printf-1.c: Likewise.

Attachment: wformat_loc_1.diff
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]