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

--- Comment #8 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Author: dmalcolm
Date: Tue Nov 28 21:45:56 2017
New Revision: 255219

URL: https://gcc.gnu.org/viewcvs?rev=255219&root=gcc&view=rev
Log:
Handle very long lines when printing fix-it hints

When fixing PR c/82050 I noticed a bug in how we print fix-it hints
for very long lines: we weren't taking into account the x-offset for
the line when printing the fix-it hint.

This could lead to output where instead of printing:

foo.c:14:3944: error: etc
  = foo.field
        ^~~~~
        replacement

where the lines have been offset to start printing at about column 3900,
the "replacement" line was erroneously *not* offset, and was thus
prefixed by thousands of spaces, leading to large whitespace gaps in
the output, and the replacement failing to line up with the source to be
replaced.

Fixed thusly.

gcc/ChangeLog:
        * diagnostic-show-locus.c (layout::print_trailing_fixits): Handle
        m_x_offset.
        (layout::move_to_column): Likewise.

gcc/testsuite/ChangeLog:
        * gcc.dg/plugin/diagnostic-test-show-locus-bw.c
        (test_very_wide_line): Update expected output to include a
        fix-it hint.
        * gcc.dg/plugin/diagnostic-test-show-locus-color.c
        (test_very_wide_line): Likewise.
        * gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
        (test_show_locus): Add a fix-it hint to "test_very_wide_line".


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/diagnostic-show-locus.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-color.c
    trunk/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c

Reply via email to