aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcc.c
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2017-05-03 13:11:21 +0000
committerDavid Malcolm <dmalcolm@gcc.gnu.org>2017-05-03 13:11:21 +0000
commitd1b5f5cc3cfd148e8c479a7c05928e0289ccfadc (patch)
tree4d9a58d881b7cd4c1d8f046cd647dd9de26df3ab /gcc/gcc.c
parent5bb64c4183643680e4a1b4ccfe920d48c248cb8a (diff)
downloadgcc-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