[gcc r10-6366] analyzer: add extrinsic_state::dump
David Malcolm
dmalcolm@gcc.gnu.org
Fri Jan 31 00:29:00 GMT 2020
https://gcc.gnu.org/g:42f36563ef655db48d5fda60cd7f3eac9650dade
commit r10-6366-g42f36563ef655db48d5fda60cd7f3eac9650dade
Author: David Malcolm <dmalcolm@redhat.com>
Date: Thu Jan 30 16:59:15 2020 -0500
analyzer: add extrinsic_state::dump
gcc/analyzer/ChangeLog:
* program-state.cc (extrinsic_state::dump_to_pp): New.
(extrinsic_state::dump_to_file): New.
(extrinsic_state::dump): New.
* program-state.h (extrinsic_state::dump_to_pp): New decl.
(extrinsic_state::dump_to_file): New decl.
(extrinsic_state::dump): New decl.
* sm.cc: Include "pretty-print.h".
(state_machine::dump_to_pp): New.
* sm.h (state_machine::dump_to_pp): New decl.
Diff:
---
gcc/analyzer/ChangeLog | 12 ++++++++++++
gcc/analyzer/program-state.cc | 38 ++++++++++++++++++++++++++++++++++++++
gcc/analyzer/program-state.h | 4 ++++
gcc/analyzer/sm.cc | 12 ++++++++++++
gcc/analyzer/sm.h | 2 ++
5 files changed, 68 insertions(+)
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index 9f24206..709d1cb 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,5 +1,17 @@
2020-01-30 David Malcolm <dmalcolm@redhat.com>
+ * program-state.cc (extrinsic_state::dump_to_pp): New.
+ (extrinsic_state::dump_to_file): New.
+ (extrinsic_state::dump): New.
+ * program-state.h (extrinsic_state::dump_to_pp): New decl.
+ (extrinsic_state::dump_to_file): New decl.
+ (extrinsic_state::dump): New decl.
+ * sm.cc: Include "pretty-print.h".
+ (state_machine::dump_to_pp): New.
+ * sm.h (state_machine::dump_to_pp): New decl.
+
+2020-01-30 David Malcolm <dmalcolm@redhat.com>
+
* diagnostic-manager.cc (for_each_state_change): Use
extrinsic_state::get_num_checkers rather than accessing m_checkers
directly.
diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc
index ead62a5..4c0b9a8 100644
--- a/gcc/analyzer/program-state.cc
+++ b/gcc/analyzer/program-state.cc
@@ -59,6 +59,44 @@ along with GCC; see the file COPYING3. If not see
namespace ana {
+/* class extrinsic_state. */
+
+/* Dump a multiline representation of this state to PP. */
+
+void
+extrinsic_state::dump_to_pp (pretty_printer *pp) const
+{
+ pp_printf (pp, "extrinsic_state: %i checker(s)\n", get_num_checkers ());
+ unsigned i;
+ state_machine *checker;
+ FOR_EACH_VEC_ELT (m_checkers, i, checker)
+ {
+ pp_printf (pp, "m_checkers[%i]: %qs\n", i, checker->get_name ());
+ checker->dump_to_pp (pp);
+ }
+}
+
+/* Dump a multiline representation of this state to OUTF. */
+
+void
+extrinsic_state::dump_to_file (FILE *outf) const
+{
+ pretty_printer pp;
+ if (outf == stderr)
+ pp_show_color (&pp) = pp_show_color (global_dc->printer);
+ pp.buffer->stream = outf;
+ dump_to_pp (&pp);
+ pp_flush (&pp);
+}
+
+/* Dump a multiline representation of this state to stderr. */
+
+DEBUG_FUNCTION void
+extrinsic_state::dump () const
+{
+ dump_to_file (stderr);
+}
+
/* class sm_state_map. */
/* sm_state_map's ctor. */
diff --git a/gcc/analyzer/program-state.h b/gcc/analyzer/program-state.h
index a052c6e..d2badb1 100644
--- a/gcc/analyzer/program-state.h
+++ b/gcc/analyzer/program-state.h
@@ -45,6 +45,10 @@ public:
unsigned get_num_checkers () const { return m_checkers.length (); }
+ void dump_to_pp (pretty_printer *pp) const;
+ void dump_to_file (FILE *outf) const;
+ void dump () const;
+
private:
/* The state machines. */
auto_delete_vec <state_machine> &m_checkers;
diff --git a/gcc/analyzer/sm.cc b/gcc/analyzer/sm.cc
index 74fd170..e94c691 100644
--- a/gcc/analyzer/sm.cc
+++ b/gcc/analyzer/sm.cc
@@ -28,6 +28,7 @@ along with GCC; see the file COPYING3. If not see
#include "options.h"
#include "function.h"
#include "diagnostic-core.h"
+#include "pretty-print.h"
#include "analyzer/analyzer.h"
#include "analyzer/analyzer-logging.h"
#include "analyzer/sm.h"
@@ -91,6 +92,17 @@ state_machine::validate (state_t s) const
gcc_assert (s < m_state_names.length ());
}
+/* Dump a multiline representation of this state machine to PP. */
+
+void
+state_machine::dump_to_pp (pretty_printer *pp) const
+{
+ unsigned i;
+ const char *name;
+ FOR_EACH_VEC_ELT (m_state_names, i, name)
+ pp_printf (pp, " state %i: %qs\n", i, name);
+}
+
/* Create instances of the various state machines, each using LOGGER,
and populate OUT with them. */
diff --git a/gcc/analyzer/sm.h b/gcc/analyzer/sm.h
index 25163d7..3e8f4b6 100644
--- a/gcc/analyzer/sm.h
+++ b/gcc/analyzer/sm.h
@@ -80,6 +80,8 @@ public:
void validate (state_t s) const;
+ void dump_to_pp (pretty_printer *pp) const;
+
protected:
state_t add_state (const char *name);
More information about the Gcc-cvs
mailing list