From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 1C7363954411 for ; Mon, 14 Jun 2021 15:11:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1C7363954411 Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-343-7FVLmHS_NG2y15sC_NxAow-1; Mon, 14 Jun 2021 11:10:42 -0400 X-MC-Unique: 7FVLmHS_NG2y15sC_NxAow-1 Received: by mail-qk1-f197.google.com with SMTP id u6-20020ae9c0060000b02903ab0c9eea47so8863216qkk.16 for ; Mon, 14 Jun 2021 08:10:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=YxJzeHy1lkX9tF+F+ClhSqKpbx9Cb+6W0ZLWm7KHF/s=; b=TmsE2t/s35J5hk56bviV6cpQS9b5s669kQrwJfwQ09WYbhGmXjfWgPW64Ln51EmG3r w09dFlM7Zk1Bd7Vl9UOiiNYxM+MqKVKZiBJJdewzQsLPc+LGEMM3g1zFAk1yNXz5Shyw uKOpaJC1xRXffCIih3rTXvFFw2/vOW2VlNsg6I4fmdv6BSrh2MMkOutR0vIRMMWmDWbl a6dMYijuVPiLWtNlLIveq33e5HsxMNwZLDZYc9wvJF3027nLl29CmfLF4M2PCgvFHkgn KsVXYUxaeZhOP2YvTPbwBevTGcugE0aFA0zO0gyN2PEpKFurVCfhPIeiTV2M79VmPF17 htug== X-Gm-Message-State: AOAM533E0a6HK+pikllNBjXBH957xagV/K76zYXijWRAKAD7Uu5lGv5x rP2TFoWNqZ5pMEjEekwHYx9CcAJ4cZR7PXqfx1Ugo4066GeW/Ix2feoMDUo9dk4pR9eCkPmy6TN /XdOCp2YofTjWpUD9fQ== X-Received: by 2002:a05:620a:709:: with SMTP id 9mr16460196qkc.493.1623683441962; Mon, 14 Jun 2021 08:10:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx1H01l75/AVd56b0vank4ySwNeD6ljivVRAyuP8j5o/wf0bcacf3mLe55grf0mW0JJaRgJ4A== X-Received: by 2002:a05:620a:709:: with SMTP id 9mr16460122qkc.493.1623683441248; Mon, 14 Jun 2021 08:10:41 -0700 (PDT) Received: from t14s.localdomain (c-73-69-212-193.hsd1.nh.comcast.net. [73.69.212.193]) by smtp.gmail.com with ESMTPSA id a128sm10261762qkc.15.2021.06.14.08.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jun 2021 08:10:40 -0700 (PDT) Message-ID: <593b26ff0bb913d0a1c56fb1c7adab1c96ad3ea4.camel@redhat.com> Subject: Re: [PATCH v2] Extract a common logger the analyzer framework From: David Malcolm To: Philip Herron , gcc-patches@gcc.gnu.org Date: Mon, 14 Jun 2021 11:10:39 -0400 In-Reply-To: <20210308180426.109429-1-philip.herron@embecosm.com> References: <20210308180426.109429-1-philip.herron@embecosm.com> User-Agent: Evolution 3.38.4 (3.38.4-1.fc33) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, BODY_8BITS, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jun 2021 15:11:05 -0000 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 > >         * logging.h: added new generic logger based off analyzer's > logger >         * logging.c: Likewise > > gcc/analyzer/ChangeLog: > > 2021-03-8  Philip Herron > >         * 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 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 . >   > @@ -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 . >   > @@ -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 >  .  */ >   > -/* 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 */