This is the mail archive of the gcc-bugs@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]

[Bug c/64955] RFE: have -Wformat suggest the correct format string to use


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64955

--- Comment #6 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Mon Aug  8 22:50:47 2016
New Revision: 239260

URL: https://gcc.gnu.org/viewcvs?rev=239260&root=gcc&view=rev
Log:
c-format.c: suggest the correct format string to use (PR c/64955)

This adds fix-it hints to c-format.c so that it can (sometimes) suggest
the format string the user should have used.

The patch adds selftests for the new code in c-format.c.  These
selftests are thus lang-specific.  This is the first time we've had
lang-specific selftests, and hence the patch also adds a langhook for
running them.  (Note that currently the Makefile only invokes the
selftests for cc1).

gcc/c-family/ChangeLog:
        PR c/64955
        * c-common.h (selftest::c_format_c_tests): New declaration.
        (selftest::run_c_tests): New declaration.
        * c-format.c: Include "selftest.h.
        (format_warning_va): Add param "corrected_substring" and use
        it to add a replacement fix-it hint.
        (format_warning_at_substring): Likewise.
        (format_warning_at_char): Update for new param of
        format_warning_va.
        (argument_parser::check_argument_type): Pass "fki" to
        check_format_types.
        (check_format_types): Add param "fki" and pass it to
        format_type_warning.
        (deref_n_times): New function.
        (get_modifier_for_format_len): New function.
        (selftest::test_get_modifier_for_format_len): New function.
        (get_format_for_type): New function.
        (format_type_warning): Add param "fki" and use it to attempt
        to provide hints for argument types when calling
        format_warning_at_substring.
        (selftest::get_info): New function.
        (selftest::assert_format_for_type_streq): New function.
        (ASSERT_FORMAT_FOR_TYPE_STREQ): New macro.
        (selftest::test_get_format_for_type_printf): New function.
        (selftest::test_get_format_for_type_scanf): New function.
        (selftest::c_format_c_tests): New function.

gcc/c/ChangeLog:
        PR c/64955
        * c-lang.c (LANG_HOOKS_RUN_LANG_SELFTESTS): If CHECKING_P, wire
        this up to selftest::run_c_tests.
        (selftest::run_c_tests): New function.

gcc/ChangeLog:
        PR c/64955
        * langhooks-def.h (LANG_HOOKS_RUN_LANG_SELFTESTS): New default
        do-nothing langhook.
        (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_RUN_LANG_SELFTESTS.
        * langhooks.h (struct lang_hooks): Add run_lang_selftests.
        * selftest-run-tests.c: Include "tree.h" and "langhooks.h".
        (selftest::run_tests): Call lang_hooks.run_lang_selftests.

gcc/testsuite/ChangeLog:
        PR c/64955
        * gcc.dg/format/diagnostic-ranges.c: Add fix-it hints to expected
        output.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c-common.h
    trunk/gcc/c-family/c-format.c
    trunk/gcc/c/ChangeLog
    trunk/gcc/c/c-lang.c
    trunk/gcc/langhooks-def.h
    trunk/gcc/langhooks.h
    trunk/gcc/selftest-run-tests.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/format/diagnostic-ranges.c

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