Commit e2a538b1 by David Malcolm

analyzer: cleanups to checker_path

This patch adds DISABLE_COPY_AND_ASSIGN to checker_path, and makes its
fields private.

gcc/analyzer/ChangeLog:
	* checker-path.h (checker_path::get_checker_event): New function.
	(checker_path): Add DISABLE_COPY_AND_ASSIGN; make fields private.
	* diagnostic-manager.cc
	(diagnostic_manager::prune_for_sm_diagnostic): Replace direct
	access to checker_path::m_events with accessor functions.  Fix
	overlong line.
	(diagnostic_manager::prune_interproc_events): Replace direct
	access to checker_path::m_events with accessor functions.
	(diagnostic_manager::finish_pruning): Likewise.
parent 94946989
2020-01-14 David Malcolm <dmalcolm@redhat.com> 2020-01-14 David Malcolm <dmalcolm@redhat.com>
* checker-path.h (checker_path::get_checker_event): New function.
(checker_path): Add DISABLE_COPY_AND_ASSIGN; make fields private.
* diagnostic-manager.cc
(diagnostic_manager::prune_for_sm_diagnostic): Replace direct
access to checker_path::m_events with accessor functions. Fix
overlong line.
(diagnostic_manager::prune_interproc_events): Replace direct
access to checker_path::m_events with accessor functions.
(diagnostic_manager::finish_pruning): Likewise.
2020-01-14 David Malcolm <dmalcolm@redhat.com>
* checker-path.h (checker_event::clone): Delete vfunc decl. * checker-path.h (checker_event::clone): Delete vfunc decl.
(debug_event::clone): Delete vfunc impl. (debug_event::clone): Delete vfunc impl.
(custom_event::clone): Delete vfunc impl. (custom_event::clone): Delete vfunc impl.
......
...@@ -452,6 +452,11 @@ public: ...@@ -452,6 +452,11 @@ public:
return *m_events[idx]; return *m_events[idx];
} }
checker_event *get_checker_event (int idx)
{
return m_events[idx];
}
void dump (pretty_printer *pp) const; void dump (pretty_printer *pp) const;
void debug () const; void debug () const;
...@@ -502,6 +507,9 @@ public: ...@@ -502,6 +507,9 @@ public:
return false; return false;
} }
private:
DISABLE_COPY_AND_ASSIGN(checker_path);
/* The events that have occurred along this path. */ /* The events that have occurred along this path. */
auto_delete_vec<checker_event> m_events; auto_delete_vec<checker_event> m_events;
......
...@@ -961,10 +961,10 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path, ...@@ -961,10 +961,10 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
tree var, tree var,
state_machine::state_t state) const state_machine::state_t state) const
{ {
int idx = path->m_events.length () - 1; int idx = path->num_events () - 1;
while (idx >= 0 && idx < (signed)path->m_events.length ()) while (idx >= 0 && idx < (signed)path->num_events ())
{ {
checker_event *base_event = path->m_events[idx]; checker_event *base_event = path->get_checker_event (idx);
if (get_logger ()) if (get_logger ())
{ {
if (sm) if (sm)
...@@ -1096,7 +1096,8 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path, ...@@ -1096,7 +1096,8 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
log ("filtering event %i: CFG edge", idx); log ("filtering event %i: CFG edge", idx);
path->delete_event (idx); path->delete_event (idx);
/* Also delete the corresponding EK_END_CFG_EDGE. */ /* Also delete the corresponding EK_END_CFG_EDGE. */
gcc_assert (path->m_events[idx]->m_kind == EK_END_CFG_EDGE); gcc_assert (path->get_checker_event (idx)->m_kind
== EK_END_CFG_EDGE);
path->delete_event (idx); path->delete_event (idx);
} }
} }
...@@ -1193,18 +1194,19 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const ...@@ -1193,18 +1194,19 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
do do
{ {
changed = false; changed = false;
int idx = path->m_events.length () - 1; int idx = path->num_events () - 1;
while (idx >= 0) while (idx >= 0)
{ {
/* Prune [..., call, function-entry, return, ...] triples. */ /* Prune [..., call, function-entry, return, ...] triples. */
if (idx + 2 < (signed)path->m_events.length () if (idx + 2 < (signed)path->num_events ()
&& path->m_events[idx]->is_call_p () && path->get_checker_event (idx)->is_call_p ()
&& path->m_events[idx + 1]->is_function_entry_p () && path->get_checker_event (idx + 1)->is_function_entry_p ()
&& path->m_events[idx + 2]->is_return_p ()) && path->get_checker_event (idx + 2)->is_return_p ())
{ {
if (get_logger ()) if (get_logger ())
{ {
label_text desc (path->m_events[idx]->get_desc (false)); label_text desc
(path->get_checker_event (idx)->get_desc (false));
log ("filtering events %i-%i:" log ("filtering events %i-%i:"
" irrelevant call/entry/return: %s", " irrelevant call/entry/return: %s",
idx, idx + 2, desc.m_buffer); idx, idx + 2, desc.m_buffer);
...@@ -1220,13 +1222,14 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const ...@@ -1220,13 +1222,14 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
/* Prune [..., call, return, ...] pairs /* Prune [..., call, return, ...] pairs
(for -fanalyzer-verbosity=0). */ (for -fanalyzer-verbosity=0). */
if (idx + 1 < (signed)path->m_events.length () if (idx + 1 < (signed)path->num_events ()
&& path->m_events[idx]->is_call_p () && path->get_checker_event (idx)->is_call_p ()
&& path->m_events[idx + 1]->is_return_p ()) && path->get_checker_event (idx + 1)->is_return_p ())
{ {
if (get_logger ()) if (get_logger ())
{ {
label_text desc (path->m_events[idx]->get_desc (false)); label_text desc
(path->get_checker_event (idx)->get_desc (false));
log ("filtering events %i-%i:" log ("filtering events %i-%i:"
" irrelevant call/return: %s", " irrelevant call/return: %s",
idx, idx + 1, desc.m_buffer); idx, idx + 1, desc.m_buffer);
...@@ -1256,10 +1259,10 @@ diagnostic_manager::finish_pruning (checker_path *path) const ...@@ -1256,10 +1259,10 @@ diagnostic_manager::finish_pruning (checker_path *path) const
{ {
if (!path->interprocedural_p ()) if (!path->interprocedural_p ())
{ {
int idx = path->m_events.length () - 1; int idx = path->num_events () - 1;
while (idx >= 0 && idx < (signed)path->m_events.length ()) while (idx >= 0 && idx < (signed)path->num_events ())
{ {
checker_event *base_event = path->m_events[idx]; checker_event *base_event = path->get_checker_event (idx);
if (base_event->m_kind == EK_FUNCTION_ENTRY) if (base_event->m_kind == EK_FUNCTION_ENTRY)
{ {
log ("filtering event %i:" log ("filtering event %i:"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment