diff options
author | David Malcolm <dmalcolm@redhat.com> | 2017-05-03 13:11:21 +0000 |
---|---|---|
committer | David Malcolm <dmalcolm@gcc.gnu.org> | 2017-05-03 13:11:21 +0000 |
commit | d1b5f5cc3cfd148e8c479a7c05928e0289ccfadc (patch) | |
tree | 4d9a58d881b7cd4c1d8f046cd647dd9de26df3ab /gcc/gcc.c | |
parent | 5bb64c4183643680e4a1b4ccfe920d48c248cb8a (diff) | |
download | gcc-d1b5f5cc3cfd148e8c479a7c05928e0289ccfadc.zip gcc-d1b5f5cc3cfd148e8c479a7c05928e0289ccfadc.tar.gz gcc-d1b5f5cc3cfd148e8c479a7c05928e0289ccfadc.tar.bz2 |
New fix-it printer
The existing fix-it printer can lead to difficult-to-read output
when fix-it hints are near each other. For example, in a recent
patch to add fix-it hints to the C++ frontend's -Wold-style-cast,
e.g. for:
foo *f = (foo *)ptr->field;
^~~~~
the fix-it hints:
replace the open paren with "const_cast<"
replace the close paren with "> ("
insert ")" after the "ptr->field"
would be printed in this odd-looking way:
foo *f = (foo *)ptr->field;
^~~~~
-
const_cast<
-
> ( )
class rich_location consolidates adjacent fix-it hints, which helps
somewhat, but the underlying problem is that the existing printer
simply walks through the list of hints printing them, starting newlines
as necessary.
This patch reimplements fix-it printing by introducing a planning
stage: a new class line_corrections "plans" how to print the
fix-it hints affecting a line, generating a vec of "correction"
instances. Hints that are sufficiently close to each other are
consolidated at this stage.
This leads to the much more reasonable output for the above case:
foo *f = (foo *)ptr->field;
^~~~~
-----------------
const_cast<foo *> (ptr->field);
where the 3 hints are consolidated into one "correction" at printing.
gcc/ChangeLog:
* diagnostic-show-locus.c (struct column_range): New struct.
(get_affected_columns): New function.
(get_printed_columns): New function.
(struct correction): New struct.
(correction::ensure_capacity): New function.
(correction::ensure_terminated): New function.
(struct line_corrections): New struct.
(line_corrections::~line_corrections): New dtor.
(line_corrections::add_hint): New function.
(layout::print_trailing_fixits): Reimplement in terms of the new
classes.
(selftest::test_overlapped_fixit_printing): New function.
(selftest::diagnostic_show_locus_c_tests): Call it.
From-SVN: r247548
Diffstat (limited to 'gcc/gcc.c')
0 files changed, 0 insertions, 0 deletions