[PATCH v2] Extract a common logger the analyzer framework

David Malcolm dmalcolm@redhat.com
Mon Jun 14 15:10:39 GMT 2021


On Mon, 2021-03-08 at 11:04 -0700, Philip Herron wrote:

"Extract a common logger from the analyzer framework", surely?
                         ^^^^

> In development of the Rust FE logging is useful in debugging. Instead
> of
> rolling our own logger it became clear the loggers part of analyzer
> and jit
> projects could be extracted and made generic so they could be reused
> in
> other projects.
> 
> To test this patch make check-jit was invoked, for analyzer the
> following
> flags were used -fanalyzer -fdump-analyzer -fanalyzer-verbosity=4.
> 
> gcc/ChangeLog:
> 
> 2021-03-8  Philip Herron <philip.herron@embecosm.com>
> 
>         * logging.h: added new generic logger based off analyzer's
> logger
>         * logging.c: Likewise
> 
> gcc/analyzer/ChangeLog:
> 
> 2021-03-8  Philip Herron <philip.herron@embecosm.com>
> 
>         * analyzer-logging.h: has been extract out to gcc/logging.h
>         * analyzer-logging.c: Likewise


FWIW the analyzer parts look OK to me, though I think you need a global
reviewer to approve this.

Also, the commit message is now out-of-date, since this is no longer
refactoring the jit logging code, just the analyzer logger.

The ChangeLog entries look like they need a bit of reformatting.

Dave


> ---
>  gcc/Makefile.in                               |   3 +-
>  gcc/analyzer/analysis-plan.cc                 |   2 +-
>  gcc/analyzer/analysis-plan.h                  |   2 +-
>  gcc/analyzer/analyzer.h                       |   7 +-
>  gcc/analyzer/checker-path.cc                  |   2 +-
>  gcc/analyzer/complexity.cc                    |   2 +-
>  gcc/analyzer/diagnostic-manager.cc            |   2 +-
>  gcc/analyzer/diagnostic-manager.h             |   2 +-
>  gcc/analyzer/engine.cc                        |  10 +-
>  gcc/analyzer/exploded-graph.h                 |   4 +-
>  gcc/analyzer/pending-diagnostic.cc            |   2 +-
>  gcc/analyzer/program-point.cc                 |   2 +-
>  gcc/analyzer/program-state.cc                 |   2 +-
>  gcc/analyzer/region-model-impl-calls.cc       |   2 +-
>  gcc/analyzer/region-model-manager.cc          |   2 +-
>  gcc/analyzer/region-model-reachability.cc     |   2 +-
>  gcc/analyzer/region-model.cc                  |   2 +-
>  gcc/analyzer/region.cc                        |   2 +-
>  gcc/analyzer/sm-file.cc                       |   2 +-
>  gcc/analyzer/sm-malloc.cc                     |   2 +-
>  gcc/analyzer/sm-pattern-test.cc               |   2 +-
>  gcc/analyzer/sm-sensitive.cc                  |   2 +-
>  gcc/analyzer/sm-signal.cc                     |   2 +-
>  gcc/analyzer/sm-taint.cc                      |   2 +-
>  gcc/analyzer/sm.cc                            |   2 +-
>  gcc/analyzer/sm.h                             |   2 +-
>  gcc/analyzer/state-purge.cc                   |   4 +-
>  gcc/analyzer/state-purge.h                    |   2 +-
>  gcc/analyzer/store.cc                         |   2 +-
>  gcc/analyzer/supergraph.cc                    |   2 +-
>  gcc/analyzer/supergraph.h                     |   8 +-
>  gcc/analyzer/svalue.cc                        |   2 +-
>  .../analyzer-logging.cc => logging.c}         |  37 +++----
>  .../analyzer-logging.h => logging.h}          | 100 +++++++++-------
> --
>  34 files changed, 111 insertions(+), 114 deletions(-)
>  rename gcc/{analyzer/analyzer-logging.cc => logging.c} (87%)
>  rename gcc/{analyzer/analyzer-logging.h => logging.h} (71%)
> 
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index a63c5d9cab6..408ef6e3f0b 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -1244,7 +1244,6 @@ C_COMMON_OBJS = c-family/c-common.o c-family/c-
> cppbuiltin.o c-family/c-dump.o \
>  ANALYZER_OBJS = \
>         analyzer/analysis-plan.o \
>         analyzer/analyzer.o \
> -       analyzer/analyzer-logging.o \
>         analyzer/analyzer-pass.o \
>         analyzer/analyzer-selftests.o \
>         analyzer/bar-chart.o \
> @@ -1710,7 +1709,7 @@ OBJS-libcommon = diagnostic.o diagnostic-
> color.o diagnostic-show-locus.o \
>         pretty-print.o intl.o \
>         sbitmap.o \
>         vec.o input.o version.o hash-table.o ggc-none.o memory-
> block.o \
> -       selftest.o selftest-diagnostic.o sort.o
> +       selftest.o selftest-diagnostic.o sort.o logging.o
>  
>  # Objects in libcommon-target.a, used by drivers and by the core
>  # compiler and containing target-dependent code.
> diff --git a/gcc/analyzer/analysis-plan.cc b/gcc/analyzer/analysis-
> plan.cc
> index 7dfc48e9c3e..40d325976ca 100644
> --- a/gcc/analyzer/analysis-plan.cc
> +++ b/gcc/analyzer/analysis-plan.cc
> @@ -30,7 +30,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-core.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/analysis-plan.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
> diff --git a/gcc/analyzer/analysis-plan.h b/gcc/analyzer/analysis-
> plan.h
> index 1d10b772833..51fc5f6d460 100644
> --- a/gcc/analyzer/analysis-plan.h
> +++ b/gcc/analyzer/analysis-plan.h
> @@ -31,7 +31,7 @@ namespace ana {
>     - which callgraph edges should use call summaries
>     TODO: the above is a work-in-progress.  */
>  
> -class analysis_plan : public log_user
> +class analysis_plan : public gcc::log_user
>  {
>  public:
>    analysis_plan (const supergraph &sg, logger *logger);
> diff --git a/gcc/analyzer/analyzer.h b/gcc/analyzer/analyzer.h
> index f50ac662516..2c2982e8adb 100644
> --- a/gcc/analyzer/analyzer.h
> +++ b/gcc/analyzer/analyzer.h
> @@ -23,6 +23,12 @@ along with GCC; see the file COPYING3.  If not see
>  
>  class graphviz_out;
>  
> +namespace gcc {
> +  class logger;
> +}
> +
> +using gcc::logger;
> +
>  namespace ana {
>  
>  /* Forward decls of common types, with indentation to show
> inheritance.  */
> @@ -98,7 +104,6 @@ class rewind_info_t;
>  
>  class engine;
>  class state_machine;
> -class logger;
>  class visitor;
>  
>  /* Forward decls of functions.  */
> diff --git a/gcc/analyzer/checker-path.cc b/gcc/analyzer/checker-
> path.cc
> index e6e3ec18688..ca138336fd3 100644
> --- a/gcc/analyzer/checker-path.cc
> +++ b/gcc/analyzer/checker-path.cc
> @@ -40,7 +40,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "shortest-paths.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "sbitmap.h"
>  #include "bitmap.h"
> diff --git a/gcc/analyzer/complexity.cc b/gcc/analyzer/complexity.cc
> index ece4272ff6e..2b374eeccd3 100644
> --- a/gcc/analyzer/complexity.cc
> +++ b/gcc/analyzer/complexity.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "options.h"
>  #include "cgraph.h"
>  #include "cfg.h"
> diff --git a/gcc/analyzer/diagnostic-manager.cc
> b/gcc/analyzer/diagnostic-manager.cc
> index 7f20841768b..46a39a5d7fe 100644
> --- a/gcc/analyzer/diagnostic-manager.cc
> +++ b/gcc/analyzer/diagnostic-manager.cc
> @@ -39,7 +39,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "ordered-hash-map.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  #include "analyzer/diagnostic-manager.h"
> diff --git a/gcc/analyzer/diagnostic-manager.h
> b/gcc/analyzer/diagnostic-manager.h
> index c55807851fd..60d6aaa1163 100644
> --- a/gcc/analyzer/diagnostic-manager.h
> +++ b/gcc/analyzer/diagnostic-manager.h
> @@ -87,7 +87,7 @@ class path_builder;
>     This also lets us compute shortest_paths once, rather than
>     per-diagnostic.  */
>  
> -class diagnostic_manager : public log_user
> +class diagnostic_manager : public gcc::log_user
>  {
>  public:
>    diagnostic_manager (logger *logger, engine *eng, int verbosity);
> diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc
> index 5339ea39712..c41435d4c28 100644
> --- a/gcc/analyzer/engine.cc
> +++ b/gcc/analyzer/engine.cc
> @@ -39,7 +39,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "selftest.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/call-string.h"
>  #include "analyzer/program-point.h"
>  #include "analyzer/store.h"
> @@ -350,7 +350,7 @@ public:
>      return NULL_TREE;
>    }
>  
> -  log_user m_logger;
> +  gcc::log_user m_logger;
>    exploded_graph &m_eg;
>    const exploded_node *m_enode_for_diag;
>    const program_state *m_old_state;
> @@ -3243,7 +3243,7 @@ exploded_graph::log_stats () const
>         ++iter)
>      {
>        function *fn = (*iter).first;
> -      log_scope s (logger, function_name (fn));
> +      gcc::log_scope s (logger, function_name (fn));
>        (*iter).second->log (logger);
>      }
>  
> @@ -4817,10 +4817,10 @@ run_checkers ()
>      }
>  
>    {
> -    log_user the_logger (NULL);
> +         gcc::log_user the_logger (NULL);
>      if (dump_fout)
>        the_logger.set_logger (new logger (dump_fout, 0, 0,
> -                                        *global_dc->printer));
> +                                        global_dc->printer));
>      LOG_SCOPE (the_logger.get_logger ());
>  
>      impl_run_checkers (the_logger.get_logger ());
> diff --git a/gcc/analyzer/exploded-graph.h b/gcc/analyzer/exploded-
> graph.h
> index 871cb78b73a..bbabdc65fa0 100644
> --- a/gcc/analyzer/exploded-graph.h
> +++ b/gcc/analyzer/exploded-graph.h
> @@ -69,7 +69,7 @@ class impl_region_model_context : public
> region_model_context
>    void on_escaped_function (tree fndecl) FINAL OVERRIDE;
>  
>    exploded_graph *m_eg;
> -  log_user m_logger;
> +  gcc::log_user m_logger;
>    const exploded_node *m_enode_for_diag;
>    const program_state *m_old_state;
>    program_state *m_new_state;
> @@ -814,7 +814,7 @@ private:
>  
>    const supergraph &m_sg;
>  
> -  log_user m_logger;
> +  gcc::log_user m_logger;
>  
>    /* Map from point/state to exploded node.
>       To avoid duplication we store point_and_state
> diff --git a/gcc/analyzer/pending-diagnostic.cc
> b/gcc/analyzer/pending-diagnostic.cc
> index adff25130fd..855ca7dece1 100644
> --- a/gcc/analyzer/pending-diagnostic.cc
> +++ b/gcc/analyzer/pending-diagnostic.cc
> @@ -28,7 +28,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "diagnostic-event-id.h"
>  #include "analyzer/sm.h"
> diff --git a/gcc/analyzer/program-point.cc b/gcc/analyzer/program-
> point.cc
> index d8cfc61975e..e8c22388243 100644
> --- a/gcc/analyzer/program-point.cc
> +++ b/gcc/analyzer/program-point.cc
> @@ -36,7 +36,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "gimple-iterator.h"
>  #include "digraph.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/supergraph.h"
>  #include "analyzer/program-point.h"
>  #include "sbitmap.h"
> diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-
> state.cc
> index e427fff59d6..d5c521adcec 100644
> --- a/gcc/analyzer/program-state.cc
> +++ b/gcc/analyzer/program-state.cc
> @@ -27,7 +27,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "sbitmap.h"
>  #include "bitmap.h"
> diff --git a/gcc/analyzer/region-model-impl-calls.cc
> b/gcc/analyzer/region-model-impl-calls.cc
> index f83c12b5cb7..7e0ff1bf257 100644
> --- a/gcc/analyzer/region-model-impl-calls.cc
> +++ b/gcc/analyzer/region-model-impl-calls.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/region-model-manager.cc
> b/gcc/analyzer/region-model-manager.cc
> index dfd2413e914..fca4c8179d7 100644
> --- a/gcc/analyzer/region-model-manager.cc
> +++ b/gcc/analyzer/region-model-manager.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/region-model-reachability.cc
> b/gcc/analyzer/region-model-reachability.cc
> index 087185b4e45..79217339acc 100644
> --- a/gcc/analyzer/region-model-reachability.cc
> +++ b/gcc/analyzer/region-model-reachability.cc
> @@ -41,7 +41,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "selftest.h"
>  #include "function.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-
> model.cc
> index 96ed549adf6..2b6aac24e91 100644
> --- a/gcc/analyzer/region-model.cc
> +++ b/gcc/analyzer/region-model.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc
> index 6db1fc91afd..c63aede909e 100644
> --- a/gcc/analyzer/region.cc
> +++ b/gcc/analyzer/region.cc
> @@ -46,7 +46,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/sm-file.cc b/gcc/analyzer/sm-file.cc
> index 48ef4aa2334..61352461d4a 100644
> --- a/gcc/analyzer/sm-file.cc
> +++ b/gcc/analyzer/sm-file.cc
> @@ -32,7 +32,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  #include "analyzer/function-set.h"
> diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc
> index ef250c80915..d3f202da5b1 100644
> --- a/gcc/analyzer/sm-malloc.cc
> +++ b/gcc/analyzer/sm-malloc.cc
> @@ -33,7 +33,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  #include "tristate.h"
> diff --git a/gcc/analyzer/sm-pattern-test.cc b/gcc/analyzer/sm-
> pattern-test.cc
> index 43b847559f8..574df06c48a 100644
> --- a/gcc/analyzer/sm-pattern-test.cc
> +++ b/gcc/analyzer/sm-pattern-test.cc
> @@ -34,7 +34,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  
> diff --git a/gcc/analyzer/sm-sensitive.cc b/gcc/analyzer/sm-
> sensitive.cc
> index 95172f08922..f8f1eca5911 100644
> --- a/gcc/analyzer/sm-sensitive.cc
> +++ b/gcc/analyzer/sm-sensitive.cc
> @@ -34,7 +34,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  
> diff --git a/gcc/analyzer/sm-signal.cc b/gcc/analyzer/sm-signal.cc
> index d7e7e7cab04..83a2ef9e8de 100644
> --- a/gcc/analyzer/sm-signal.cc
> +++ b/gcc/analyzer/sm-signal.cc
> @@ -35,7 +35,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  #include "sbitmap.h"
> diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc
> index 2b2792e5edb..c6e5330869a 100644
> --- a/gcc/analyzer/sm-taint.cc
> +++ b/gcc/analyzer/sm-taint.cc
> @@ -34,7 +34,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "json.h"
>  #include "analyzer/analyzer.h"
>  #include "diagnostic-event-id.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  #include "analyzer/pending-diagnostic.h"
>  
> diff --git a/gcc/analyzer/sm.cc b/gcc/analyzer/sm.cc
> index 2d227dd1be0..9b5de4345cc 100644
> --- a/gcc/analyzer/sm.cc
> +++ b/gcc/analyzer/sm.cc
> @@ -33,7 +33,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "tree-diagnostic.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/sm.h"
>  
>  #if ENABLE_ANALYZER
> diff --git a/gcc/analyzer/sm.h b/gcc/analyzer/sm.h
> index 8d4d030394a..ce6e15f2f7c 100644
> --- a/gcc/analyzer/sm.h
> +++ b/gcc/analyzer/sm.h
> @@ -35,7 +35,7 @@ extern bool any_pointer_p (tree var);
>     Manages a set of state objects, and has various virtual functions
>     for pattern-matching on statements.  */
>  
> -class state_machine : public log_user
> +class state_machine : public gcc::log_user
>  {
>  public:
>    /* States are represented by immutable objects, owned by the state
> diff --git a/gcc/analyzer/state-purge.cc b/gcc/analyzer/state-
> purge.cc
> index 70a09ed581f..4a577255231 100644
> --- a/gcc/analyzer/state-purge.cc
> +++ b/gcc/analyzer/state-purge.cc
> @@ -47,7 +47,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "cgraph.h"
>  #include "analyzer/supergraph.h"
>  #include "analyzer/program-point.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "analyzer/state-purge.h"
>  
>  #if ENABLE_ANALYZER
> @@ -198,7 +198,7 @@
> state_purge_per_ssa_name::state_purge_per_ssa_name (const
> state_purge_map &map,
>  
>    /* Process worklist by walking backwards until we reach the def
> stmt.  */
>    {
> -    log_scope s (map.get_logger (), "processing worklist");
> +    gcc::log_scope s (map.get_logger (), "processing worklist");
>      while (worklist.length () > 0)
>        {
>         function_point point = worklist.pop ();
> diff --git a/gcc/analyzer/state-purge.h b/gcc/analyzer/state-purge.h
> index 879013dbc17..174325290e5 100644
> --- a/gcc/analyzer/state-purge.h
> +++ b/gcc/analyzer/state-purge.h
> @@ -74,7 +74,7 @@ namespace ana {
>     different points in the program, so that we can simplify
> program_state
>     objects, in the hope of reducing state-blowup.  */
>  
> -class state_purge_map : public log_user
> +class state_purge_map : public gcc::log_user
>  {
>  public:
>    typedef ordered_hash_map<tree, state_purge_per_ssa_name *> map_t;
> diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc
> index 53b6e21aa75..c2ab1fc9bd6 100644
> --- a/gcc/analyzer/store.cc
> +++ b/gcc/analyzer/store.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "ordered-hash-map.h"
>  #include "options.h"
>  #include "cgraph.h"
> diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
> index 4b934568db6..eaa965901d7 100644
> --- a/gcc/analyzer/supergraph.cc
> +++ b/gcc/analyzer/supergraph.cc
> @@ -51,7 +51,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "cfg.h"
>  #include "digraph.h"
>  #include "analyzer/supergraph.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  
>  #if ENABLE_ANALYZER
>  
> diff --git a/gcc/analyzer/supergraph.h b/gcc/analyzer/supergraph.h
> index fc4a753c5a4..b9dcd1df100 100644
> --- a/gcc/analyzer/supergraph.h
> +++ b/gcc/analyzer/supergraph.h
> @@ -21,6 +21,12 @@ along with GCC; see the file COPYING3.  If not see
>  #ifndef GCC_ANALYZER_SUPERGRAPH_H
>  #define GCC_ANALYZER_SUPERGRAPH_H
>  
> +namespace gcc {
> +class logger;
> +}
> +
> +using gcc::logger;
> +
>  using namespace ana;
>  
>  namespace ana {
> @@ -38,8 +44,6 @@ class superedge;
>  class supercluster;
>  class dot_annotator;
>  
> -class logger;
> -
>  /* An enum for discriminating between superedge subclasses.  */
>  
>  enum edge_kind
> diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc
> index d6305a37b9a..81e93dbde7f 100644
> --- a/gcc/analyzer/svalue.cc
> +++ b/gcc/analyzer/svalue.cc
> @@ -44,7 +44,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "function.h"
>  #include "json.h"
>  #include "analyzer/analyzer.h"
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  #include "options.h"
>  #include "cgraph.h"
>  #include "cfg.h"
> diff --git a/gcc/analyzer/analyzer-logging.cc b/gcc/logging.c
> similarity index 87%
> rename from gcc/analyzer/analyzer-logging.cc
> rename to gcc/logging.c
> index 297319069f8..3c3ad7e0004 100644
> --- a/gcc/analyzer/analyzer-logging.cc
> +++ b/gcc/logging.c
> @@ -1,4 +1,4 @@
> -/* Hierarchical log messages for the analyzer.
> +/* Hierarchical log messages
>     Copyright (C) 2014-2021 Free Software Foundation, Inc.
>     Contributed by David Malcolm <dmalcolm@redhat.com>.
>  
> @@ -21,12 +21,11 @@ along with GCC; see the file COPYING3.  If not
> see
>  #include "config.h"
>  #include "system.h"
>  #include "coretypes.h"
> -#include "toplev.h" /* for print_version */
> +#include "toplev.h"      /* for print_version */
>  #include "pretty-print.h" /* for print_version */
>  #include "diagnostic.h"
>  #include "tree-diagnostic.h"
> -
> -#include "analyzer/analyzer-logging.h"
> +#include "logging.h"
>  
>  #if ENABLE_ANALYZER
>  
> @@ -34,21 +33,16 @@ along with GCC; see the file COPYING3.  If not
> see
>  #pragma GCC diagnostic ignored "-Wformat-diag"
>  #endif
>  
> -namespace ana {
> +namespace gcc {
>  
>  /* Implementation of class logger.  */
>  
>  /* ctor for logger.  */
>  
> -logger::logger (FILE *f_out,
> -               int, /* flags */
> -               int /* verbosity */,
> -               const pretty_printer &reference_pp) :
> -  m_refcount (0),
> -  m_f_out (f_out),
> -  m_indent_level (0),
> -  m_log_refcount_changes (false),
> -  m_pp (reference_pp.clone ())
> +logger::logger (FILE *f_out, int, /* flags */
> +               int /* verbosity */, const pretty_printer
> *reference_pp)
> +  : m_refcount (0), m_f_out (f_out), m_indent_level (0),
> +    m_log_refcount_changes (false), m_pp (reference_pp->clone ())
>  {
>    pp_show_color (m_pp) = 0;
>    pp_buffer (m_pp)->stream = f_out;
> @@ -80,8 +74,8 @@ logger::incref (const char *reason)
>  {
>    m_refcount++;
>    if (m_log_refcount_changes)
> -    log ("%s: reason: %s refcount now %i ",
> -        __PRETTY_FUNCTION__, reason, m_refcount);
> +    log ("%s: reason: %s refcount now %i ", __PRETTY_FUNCTION__,
> reason,
> +        m_refcount);
>  }
>  
>  /* Decrement the reference count of the logger,
> @@ -93,8 +87,8 @@ logger::decref (const char *reason)
>    gcc_assert (m_refcount > 0);
>    --m_refcount;
>    if (m_log_refcount_changes)
> -    log ("%s: reason: %s refcount now %i",
> -        __PRETTY_FUNCTION__, reason, m_refcount);
> +    log ("%s: reason: %s refcount now %i", __PRETTY_FUNCTION__,
> reason,
> +        m_refcount);
>    if (m_refcount == 0)
>      delete this;
>  }
> @@ -182,7 +176,6 @@ logger::enter_scope (const char *scope_name,
> const char *fmt, va_list *ap)
>    inc_indent ();
>  }
>  
> -
>  /* Record the exit from a particular scope, restoring the indent
> level to
>     before the scope was entered.  */
>  
> @@ -203,7 +196,7 @@ logger::exit_scope (const char *scope_name)
>  log_user::log_user (logger *logger) : m_logger (logger)
>  {
>    if (m_logger)
> -    m_logger->incref("log_user ctor");
> +    m_logger->incref ("log_user ctor");
>  }
>  
>  /* The destructor for log_user.  */
> @@ -211,7 +204,7 @@ log_user::log_user (logger *logger) : m_logger
> (logger)
>  log_user::~log_user ()
>  {
>    if (m_logger)
> -    m_logger->decref("log_user dtor");
> +    m_logger->decref ("log_user dtor");
>  }
>  
>  /* Set the logger for a log_user, managing the reference counts
> @@ -227,6 +220,6 @@ log_user::set_logger (logger *logger)
>    m_logger = logger;
>  }
>  
> -} // namespace ana
> +} // namespace gcc
>  
>  #endif /* #if ENABLE_ANALYZER */
> diff --git a/gcc/analyzer/analyzer-logging.h b/gcc/logging.h
> similarity index 71%
> rename from gcc/analyzer/analyzer-logging.h
> rename to gcc/logging.h
> index 88b5f0a4a3f..0ce8d4fe137 100644
> --- a/gcc/analyzer/analyzer-logging.h
> +++ b/gcc/logging.h
> @@ -1,4 +1,4 @@
> -/* Hierarchical log messages for the analyzer.
> +/* GCC Logging
>     Copyright (C) 2014-2021 Free Software Foundation, Inc.
>     Contributed by David Malcolm <dmalcolm@redhat.com>.
>  
> @@ -18,44 +18,49 @@ You should have received a copy of the GNU
> General Public License
>  along with GCC; see the file COPYING3.  If not see
>  <http://www.gnu.org/licenses/>.  */
>  
> -/* Adapted from jit-logging.h.  */
> +#ifndef GCC_LOGGING_H
> +#define GCC_LOGGING_H
>  
> -#ifndef ANALYZER_LOGGING_H
> -#define ANALYZER_LOGGING_H
> +#include "diagnostic-core.h"
>  
> -namespace ana {
> +namespace gcc {
>  
> -/* A logger encapsulates a logging stream: a way to send
> +/* A gcc::logger encapsulates a logging stream: a way to send
>     lines of pertinent information to a FILE *.  */
>  
>  class logger
>  {
> - public:
> -  logger (FILE *f_out, int flags, int verbosity, const
> pretty_printer &reference_pp);
> +public:
> +  logger (FILE *f_out, int flags, int verbosity,
> +         const pretty_printer *reference_pp);
> +
>    ~logger ();
>  
>    void incref (const char *reason);
>    void decref (const char *reason);
>  
> -  void log (const char *fmt, ...)
> -    ATTRIBUTE_GCC_DIAG(2, 3);
> -  void log_va (const char *fmt, va_list *ap)
> -    ATTRIBUTE_GCC_DIAG(2, 0);
> +  void log (const char *fmt, ...) ATTRIBUTE_GCC_DIAG (2, 3);
> +  void log_va (const char *fmt, va_list *ap) ATTRIBUTE_GCC_DIAG (2,
> 0);
>    void start_log_line ();
> -  void log_partial (const char *fmt, ...)
> -    ATTRIBUTE_GCC_DIAG(2, 3);
> -  void log_va_partial (const char *fmt, va_list *ap)
> -    ATTRIBUTE_GCC_DIAG(2, 0);
> +  void log_partial (const char *fmt, ...) ATTRIBUTE_GCC_DIAG (2, 3);
> +  void log_va_partial (const char *fmt, va_list *ap)
> ATTRIBUTE_GCC_DIAG (2, 0);
>    void end_log_line ();
>  
>    void enter_scope (const char *scope_name);
>    void enter_scope (const char *scope_name, const char *fmt, va_list
> *ap)
> -    ATTRIBUTE_GCC_DIAG(3, 0);
> +    ATTRIBUTE_GCC_DIAG (3, 0);
>    void exit_scope (const char *scope_name);
>    void inc_indent () { m_indent_level++; }
>    void dec_indent () { m_indent_level--; }
>  
> -  pretty_printer *get_printer () const { return m_pp; }
> +  bool has_pretty_printer () const { return m_pp != nullptr; }
> +
> +  pretty_printer *get_printer () const
> +  {
> +    gcc_assert (m_pp != nullptr);
> +    return m_pp;
> +  }
> +
>    FILE *get_file () const { return m_f_out; }
>  
>  private:
> @@ -68,7 +73,7 @@ private:
>    pretty_printer *m_pp;
>  };
>  
> -/* The class log_scope is an RAII-style class intended to make
> +/* The class gcc::jit::log_scope is an RAII-style class intended to
> make
>     it easy to notify a logger about entering and exiting the body of
> a
>     given function.  */
>  
> @@ -77,10 +82,10 @@ class log_scope
>  public:
>    log_scope (logger *logger, const char *name);
>    log_scope (logger *logger, const char *name, const char *fmt, ...)
> -    ATTRIBUTE_GCC_DIAG(4, 5);
> +    ATTRIBUTE_GCC_DIAG (4, 5);
>    ~log_scope ();
>  
> - private:
> +private:
>    DISABLE_COPY_AND_ASSIGN (log_scope);
>  
>    logger *m_logger;
> @@ -96,10 +101,8 @@ public:
>     We also need to hold a reference on it, to avoid a use-after-free
>     when logging the cleanup of the owner of the logger.  */
>  
> -inline
> -log_scope::log_scope (logger *logger, const char *name) :
> - m_logger (logger),
> - m_name (name)
> +inline log_scope::log_scope (logger *logger, const char *name)
> +  : m_logger (logger), m_name (name)
>  {
>    if (m_logger)
>      {
> @@ -108,10 +111,9 @@ log_scope::log_scope (logger *logger, const char
> *name) :
>      }
>  }
>  
> -inline
> -log_scope::log_scope (logger *logger, const char *name, const char
> *fmt, ...):
> - m_logger (logger),
> - m_name (name)
> +inline log_scope::log_scope (logger *logger, const char *name, const
> char *fmt,
> +                            ...)
> +  : m_logger (logger), m_name (name)
>  {
>    if (m_logger)
>      {
> @@ -123,12 +125,10 @@ log_scope::log_scope (logger *logger, const
> char *name, const char *fmt, ...):
>      }
>  }
>  
> -
>  /* The destructor for log_scope; essentially the opposite of
>     the constructor.  */
>  
> -inline
> -log_scope::~log_scope ()
> +inline log_scope::~log_scope ()
>  {
>    if (m_logger)
>      {
> @@ -143,15 +143,14 @@ log_scope::~log_scope ()
>  
>  class log_user
>  {
> - public:
> +public:
>    log_user (logger *logger);
>    ~log_user ();
>  
> -  logger * get_logger () const { return m_logger; }
> -  void set_logger (logger * logger);
> +  logger *get_logger () const { return m_logger; }
> +  void set_logger (logger *logger);
>  
> -  void log (const char *fmt, ...) const
> -    ATTRIBUTE_GCC_DIAG(2, 3);
> +  void log (const char *fmt, ...) const ATTRIBUTE_GCC_DIAG (2, 3);
>  
>    void start_log_line () const;
>    void end_log_line () const;
> @@ -172,7 +171,7 @@ class log_user
>      return m_logger->get_file ();
>    }
>  
> - private:
> +private:
>    DISABLE_COPY_AND_ASSIGN (log_user);
>  
>    logger *m_logger;
> @@ -240,27 +239,24 @@ log_user::exit_scope (const char *scope_name)
>  /* If the given logger is non-NULL, log entry/exit of this scope to
>     it, identifying it using __PRETTY_FUNCTION__.  */
>  
> -#define LOG_SCOPE(LOGGER)              \
> -  log_scope s (LOGGER, __PRETTY_FUNCTION__)
> +#define LOG_SCOPE(LOGGER) gcc::log_scope s (LOGGER,
> __PRETTY_FUNCTION__)
>  
>  /* If the given logger is non-NULL, log entry/exit of this scope to
>     it, identifying it using __func__.  */
>  
> -#define LOG_FUNC(LOGGER) \
> -  log_scope s (LOGGER, __func__)
> +#define LOG_FUNC(LOGGER) gcc::log_scope s (LOGGER, __func__)
>  
> -#define LOG_FUNC_1(LOGGER, FMT, A0)    \
> -  log_scope s (LOGGER, __func__, FMT, A0)
> +#define LOG_FUNC_1(LOGGER, FMT, A0) gcc::log_scope s (LOGGER,
> __func__, FMT, A0)
>  
> -#define LOG_FUNC_2(LOGGER, FMT, A0, A1)                \
> -  log_scope s (LOGGER, __func__, FMT, A0, A1)
> +#define LOG_FUNC_2(LOGGER, FMT, A0,
> A1)                                        \
> +  gcc::log_scope s (LOGGER, __func__, FMT, A0, A1)
>  
> -#define LOG_FUNC_3(LOGGER, FMT, A0, A1, A2)    \
> -  log_scope s (LOGGER, __func__, FMT, A0, A1, A2)
> +#define LOG_FUNC_3(LOGGER, FMT, A0, A1,
> A2)                                    \
> +  gcc::log_scope s (LOGGER, __func__, FMT, A0, A1, A2)
>  
> -#define LOG_FUNC_4(LOGGER, FMT, A0, A1, A2, A3) \
> -  log_scope s (LOGGER, __func__, FMT, A0, A1, A2, A3)
> +#define LOG_FUNC_4(LOGGER, FMT, A0, A1, A2,
> A3)                                \
> +  gcc::log_scope s (LOGGER, __func__, FMT, A0, A1, A2, A3)
>  
> -} // namespace ana
> +} // namespace gcc
>  
> -#endif /* ANALYZER_LOGGING_H */
> +#endif /* GCC_LOGGING_H */




More information about the Gcc-patches mailing list