[PATCH v2] Extract a common logger the analyzer framework
Philip Herron
philip.herron@embecosm.com
Mon Mar 8 18:04:26 GMT 2021
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
---
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 */
--
2.25.1
More information about the Gcc-patches
mailing list