Implement -fdiagnostics-parseable-fixits
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 22 Jun 2016 14:42:30 +0000 (14:42 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Wed, 22 Jun 2016 14:42:30 +0000 (14:42 +0000)
commita93eac6a845d79a77646068b98cbd90a9be7b58a
tree8d46c6412fd67294b9c6633443b3ccd90df9a278
parentd53c0398155c0374fd73764bb208d0229b7a7ff1
Implement -fdiagnostics-parseable-fixits

gcc/ChangeLog:
* common.opt (fdiagnostics-parseable-fixits): New option.
* diagnostic.c: Include "selftest.h".
(print_escaped_string): New function.
(print_parseable_fixits): New function.
(diagnostic_report_diagnostic): Call print_parseable_fixits.
(selftest::assert_print_escaped_string): New function.
(ASSERT_PRINT_ESCAPED_STRING_STREQ): New macro.
(selftest::test_print_escaped_string): New function.
(selftest::test_print_parseable_fixits_none): New function.
(selftest::test_print_parseable_fixits_insert): New function.
(selftest::test_print_parseable_fixits_remove): New function.
(selftest::test_print_parseable_fixits_replace): New function.
(selftest::diagnostic_c_tests): New function.
* diagnostic.h (struct diagnostic_context): Add field
"parseable_fixits_p".
* doc/invoke.texi (Diagnostic Message Formatting Options): Add
-fdiagnostics-parseable-fixits.
(-fdiagnostics-parseable-fixits): New option.
* opts.c (common_handle_option): Handle
-fdiagnostics-parseable-fixits.
* selftest-run-tests.c (selftest::run_tests): Call
selftest::diagnostic_c_tests.
* selftest.h (selftest::diagnostic_c_tests): New prototype.

gcc/testsuite/ChangeLog:
* gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c: New
file.
* gcc.dg/plugin/plugin.exp (plugin_test_list): Add
diagnostic-test-show-locus-parseable-fixits.c to sources for
diagnostic_plugin_test_show_locus.c.
* lib/gcc-defs.exp (freeform_regexps): New global.
(dg-regexp): New function.
(handle-dg-regexps): New function.
* lib/gcc-dg.exp (cleanup-after-saved-dg-test): Reset
freeform_regexps to the empty list.
* lib/prune.exp (prune_gcc_output): Call handle-dg-regexps.

libcpp/ChangeLog:
* include/line-map.h (fixit_hint::get_start_loc): New pure virtual
function.
(fixit_hint::maybe_get_end_loc): Likewise.
(fixit_insert::get_start_loc): New function, implementing
fixit_hint::get_start_loc.
(fixit_insert::maybe_get_end_loc): New function, implementing
fixit_hint::maybe_get_end_loc.
(fixit_remove::get_start_loc): New function, implementing
fixit_hint::get_start_loc.
(fixit_remove::maybe_get_end_loc): New function, implementing
fixit_hint::maybe_get_end_loc.
(fixit_replace::get_start_loc): New function, implementing
fixit_hint::get_start_loc.
(fixit_replace::maybe_get_end_loc): New function, implementing
fixit_hint::maybe_get_end_loc.

From-SVN: r237712
16 files changed:
gcc/ChangeLog
gcc/common.opt
gcc/diagnostic.c
gcc/diagnostic.h
gcc/doc/invoke.texi
gcc/opts.c
gcc/selftest-run-tests.c
gcc/selftest.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-parseable-fixits.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/plugin/plugin.exp
gcc/testsuite/lib/gcc-defs.exp
gcc/testsuite/lib/gcc-dg.exp
gcc/testsuite/lib/prune.exp
libcpp/ChangeLog
libcpp/include/line-map.h