I've most of the way through a v3 of the patch kit, but given the
ongoing discussion/review on this mailing list, I thought I'd post
what I have so far.
I'm going to work on squashing the changes, to produce a v3 relative to
trunk. This drops the "in-tree plugin" idea, and the
auto_client_timevar, but in the meantime here are the changes relative
to the branch.
I've rebased from r278495 (2019-11-20) to r279013 (2019-12-05).
Patch 1 contains the only change needed by the rebase.
Patch 2 contains the fixups *relative to the analyzer branch* to
convert it from being an in-tree plugin to being built into gcc,
with an opt-out configure option (--disable-analyzer). Changes
include:
* I kept the new source files in the new "gcc/analyzer" subdirectory,
although they're still built by gcc/Makefile.in - we have a huge
number of source files in the "gcc" subdir, and we already have
subdirs that complicate grep, so keeping a subdir for the source
files seemed cleanest. (though some e.g. tristate.h/cc might be
better in the gcc subdir, as noted in review)
* I kept a separate .opt file for the new command line options
* I dropped #include "gcc-plugin.h" from the source files, and
add includes of the things that are needed (which was rather tedious
as e.g. gimple.h doesn't include what it needs, requiring manually
included its dependences everywhere, which seems like a violation
of DRY - but that's an orthogonal issue)
* I added #if ENABLE_ANALYZER guards around the bodies of the source
files so that it ought to compile away with --disable-analyzer
I haven't yet measured the effect on
* I dropped the auto_client_timevar in favor of new TV_*.
* Putting everything in the core middle-end exposed a breakage in
the selftests for C++ due to the %E in some dumps, which is
FE-specific. I fixed this by rewriting the dumps to avoid %E.
See the ChangeLog of patch 2 for more details.
Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to branch "dmalcolm/analyzer-v3-unsquashed" on the GCC git
mirror.
I may integrate Lewis's fix for multicolumn characters into trunk
first, then rebase my patch, since our changes to
diagnostic-show-locus.c have numerous conflicts, albeit ones that ought
to be mechanical (if tedious) to resolve.
Dave
David Malcolm (2):
Fixup for rebase: c-format.c: get_pointer_to_named_type ->
get_named_type
Rework as a non-plugin
gcc/Makefile.in | 32 +++-
gcc/analyzer/Make-plugin.in | 182 ----------------------
gcc/analyzer/analysis-plan.cc | 8 +-
gcc/analyzer/analyzer-logging.cc | 4 +
gcc/analyzer/analyzer-pass.cc | 41 +++--
gcc/analyzer/analyzer-plugin.cc | 63 --------
gcc/analyzer/analyzer-selftests.cc | 3 +-
gcc/analyzer/analyzer-selftests.h | 2 +-
gcc/analyzer/analyzer.cc | 7 +-
gcc/analyzer/analyzer.h | 2 +
gcc/analyzer/{plugin.opt => analyzer.opt} | 0
gcc/analyzer/call-string.cc | 6 +-
gcc/analyzer/checker-path.cc | 8 +-
gcc/analyzer/config-plugin.in | 34 ----
gcc/analyzer/constraint-manager.cc | 10 +-
gcc/analyzer/diagnostic-manager.cc | 7 +-
gcc/analyzer/digraph.cc | 5 +-
gcc/analyzer/engine.cc | 26 ++--
gcc/analyzer/exploded-graph.h | 1 +
gcc/analyzer/graphviz.cc | 5 +-
gcc/analyzer/pending-diagnostic.cc | 5 +-
gcc/analyzer/program-point.cc | 5 +-
gcc/analyzer/program-state.cc | 5 +-
gcc/analyzer/region-model.cc | 66 ++++----
gcc/analyzer/region-model.h | 1 +
gcc/analyzer/shortest-paths.h | 2 +-
gcc/analyzer/sm-file.cc | 8 +-
gcc/analyzer/sm-malloc.cc | 9 +-
gcc/analyzer/sm-pattern-test.cc | 7 +-
gcc/analyzer/sm-sensitive.cc | 9 +-
gcc/analyzer/sm-signal.cc | 7 +-
gcc/analyzer/sm-taint.cc | 8 +-
gcc/analyzer/sm.cc | 8 +-
gcc/analyzer/state-purge.cc | 10 +-
gcc/analyzer/supergraph.cc | 9 +-
gcc/analyzer/supergraph.h | 4 +
gcc/analyzer/tristate.cc | 5 +-
gcc/c-family/c-format.c | 2 +-
gcc/common.opt | 3 +-
gcc/configure | 25 ++-
gcc/configure.ac | 14 +-
gcc/gcc.c | 12 --
gcc/passes.def | 1 +
gcc/selftest-run-tests.c | 4 +
gcc/timevar.def | 11 ++
gcc/tree-pass.h | 1 +
46 files changed, 301 insertions(+), 386 deletions(-)
delete mode 100644 gcc/analyzer/Make-plugin.in
delete mode 100644 gcc/analyzer/analyzer-plugin.cc
rename gcc/analyzer/{plugin.opt => analyzer.opt} (100%)
delete mode 100644 gcc/analyzer/config-plugin.in
--
2.21.0