This is a followup to:
  https://gcc.gnu.org/ml/gcc-patches/2015-09/msg01696.html
(one of the individual patches has seen iteration since that, so
I'm calling the whole thing "v5" for the sake of clarity).


Patches 1-3 are a preamble:
  "Improvements to description of source_location in line-map.h"
  "Add stats on adhoc table to dump_line_table_statistics"
  "libstdc++v3: Explicitly disable carets and colorization within
    testsuite"

Patch 4:
 "Reimplement diagnostic_show_locus, introducing rich_location classes (v5)"
is an updated version of the rewrite of diagnostic_show_locus,
via the new rich_location class.  I believe this one is ready for trunk
and could be applied without needing the followup patches; I
have a followup patch that adds support for "fix it hints" on top
of this (PR/62314).

Patch 5:
  "Add ranges to libcpp tokens (via ad-hoc data, unoptimized)"
implements token range tracking by adding range information to
the ad-hoc location table.  As noted in the patch, this generalizes
source_location (aka location_t) to be both a caret and a range,
letting us track them through our existing location-tracking
mechanisms, without having to add extra fields to core data structures.
The drawback is that it's inefficient. This is addressed by patch 10,
which implements a packing scheme to avoid the ad-hoc table for most
tokens.

Patch 6:
  "Track expression ranges in C frontend"
is an updated version of the patch to add tracking of expression
ranges to the C frontend, using the above mechanism.

Patch 7:
  "Add plugin to recursively dump the source-ranges in a tree (v2)"
is the test plugin to demo dumping the ranges for all
sub-expressions of a complicated expression.  It's unchanged since
previous versions.

Patch 8:
  "Wire things up so that libcpp users get token underlines"
wires up the work from patches 4 and 5 so that most diagnostics
in frontends using libcpp will see some kind of underlining, for tokens
at least.

Patch 9:
  "Delay some resolution of ad-hoc locations, preserving ranges"
tweaks things to provide underlines for some places that patch 8
missed.

Patch 10:
  "Compress short ranges into source_location"
is the bit-packing optimization for patch 5.

Successfully bootstrapped&regrtested the net effect of the kit on
x86_64-pc-linux-gnu (with 186 new PASS results for gcc.sum).

Some benchmarks can be seen in this post:
  https://gcc.gnu.org/ml/gcc-patches/2015-10/msg02283.html

Are patches 1-4 OK for trunk?  (assuming they individually
bootstrap&regrtest?)

How do patches 5-10 look?  I'm about to do some more benchmarking.

(The patches are relative to r228618 plus the dg-begin-multiline-output
patch).

Dave

 gcc/Makefile.in                                    |   1 +
 gcc/ada/gcc-interface/trans.c                      |   3 +-
 gcc/c-family/c-common.c                            |  25 +-
 gcc/c-family/c-common.h                            |   4 +-
 gcc/c-family/c-opts.c                              |   2 +
 gcc/c/c-decl.c                                     |   3 +-
 gcc/c/c-errors.c                                   |  12 +-
 gcc/c/c-objc-common.c                              |   2 +-
 gcc/c/c-parser.c                                   |  98 ++-
 gcc/c/c-tree.h                                     |  19 +
 gcc/c/c-typeck.c                                   |  10 +
 gcc/cp/error.c                                     |   5 +-
 gcc/diagnostic-color.c                             |   5 +-
 gcc/diagnostic-core.h                              |   8 +
 gcc/diagnostic-show-locus.c                        | 778 ++++++++++++++++++---
 gcc/diagnostic.c                                   | 196 +++++-
 gcc/diagnostic.h                                   |  55 +-
 gcc/fortran/cpp.c                                  |  13 +-
 gcc/fortran/error.c                                | 103 +--
 gcc/gcc-rich-location.c                            |  86 +++
 gcc/gcc-rich-location.h                            |  47 ++
 gcc/genmatch.c                                     |  27 +-
 gcc/gimple.h                                       |   6 +-
 gcc/input.c                                        |  41 +-
 gcc/pretty-print.c                                 |  21 +
 gcc/pretty-print.h                                 |  25 +-
 gcc/print-tree.c                                   |  21 +
 gcc/rtl-error.c                                    |   3 +-
 gcc/testsuite/gcc.dg/diagnostic-token-ranges.c     | 120 ++++
 .../gcc.dg/diagnostic-tree-expr-ranges-2.c         |  23 +
 .../gcc.dg/plugin/diagnostic-test-expressions-1.c  | 422 +++++++++++
 .../gcc.dg/plugin/diagnostic-test-show-locus-bw.c  | 149 ++++
 .../plugin/diagnostic-test-show-locus-color.c      | 158 +++++
 .../gcc.dg/plugin/diagnostic-test-show-trees-1.c   |  65 ++
 .../gcc.dg/plugin/diagnostic_plugin_show_trees.c   | 174 +++++
 .../plugin/diagnostic_plugin_test_show_locus.c     | 322 +++++++++
 .../diagnostic_plugin_test_tree_expression_range.c |  98 +++
 gcc/testsuite/gcc.dg/plugin/plugin.exp             |   7 +
 gcc/testsuite/lib/gcc-dg.exp                       |   1 +
 gcc/toplev.c                                       |   1 +
 gcc/tree-cfg.c                                     |   9 +-
 gcc/tree-diagnostic.c                              |   2 +-
 gcc/tree-inline.c                                  |   5 +-
 gcc/tree-pretty-print.c                            |   2 +-
 gcc/tree.c                                         |  54 +-
 gcc/tree.h                                         |  34 +
 libcpp/errors.c                                    |   7 +-
 libcpp/include/cpplib.h                            |   7 +-
 libcpp/include/line-map.h                          | 354 +++++++++-
 libcpp/lex.c                                       |  13 +
 libcpp/line-map.c                                  | 415 ++++++++++-
 libcpp/location-example.txt                        | 188 ++---
 libstdc++-v3/testsuite/lib/libstdc++.exp           |   2 +
 53 files changed, 3772 insertions(+), 479 deletions(-)
 create mode 100644 gcc/gcc-rich-location.c
 create mode 100644 gcc/gcc-rich-location.h
 create mode 100644 gcc/testsuite/gcc.dg/diagnostic-token-ranges.c
 create mode 100644 gcc/testsuite/gcc.dg/diagnostic-tree-expr-ranges-2.c
 create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test-expressions-1.c
 create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-bw.c
 create mode 100644 
gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-locus-color.c
 create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic-test-show-trees-1.c
 create mode 100644 gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_show_trees.c
 create mode 100644 
gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
 create mode 100644 
gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c

-- 
1.8.5.3

Reply via email to