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

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to dmalcolm/analyzer on the GCC git mirror.

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.
---
 gcc/analyzer/checker-path.h        |  8 +++++++
 gcc/analyzer/diagnostic-manager.cc | 37 ++++++++++++++++--------------
 2 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/gcc/analyzer/checker-path.h b/gcc/analyzer/checker-path.h
index 9faaeb72ddc5..35d9700e0385 100644
--- a/gcc/analyzer/checker-path.h
+++ b/gcc/analyzer/checker-path.h
@@ -455,6 +455,11 @@ public:
     return *m_events[idx];
   }
 
+  checker_event *get_checker_event (int idx)
+  {
+    return m_events[idx];
+  }
+
   void dump (pretty_printer *pp) const;
   void debug () const;
 
@@ -505,6 +510,9 @@ public:
     return false;
   }
 
+private:
+  DISABLE_COPY_AND_ASSIGN(checker_path);
+
   /* The events that have occurred along this path.  */
   auto_delete_vec<checker_event> m_events;
 
diff --git a/gcc/analyzer/diagnostic-manager.cc 
b/gcc/analyzer/diagnostic-manager.cc
index 5e4e44ecae73..c7d5f1c514fc 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -935,10 +935,10 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path 
*path,
                                             tree var,
                                             state_machine::state_t state) const
 {
-  int idx = path->m_events.length () - 1;
-  while (idx >= 0 && idx < (signed)path->m_events.length ())
+  int idx = path->num_events () - 1;
+  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 (sm)
@@ -1070,7 +1070,8 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path 
*path,
                log ("filtering event %i: CFG edge", idx);
                path->delete_event (idx);
                /* 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);
              }
          }
@@ -1167,18 +1168,19 @@ diagnostic_manager::prune_interproc_events 
(checker_path *path) const
   do
     {
       changed = false;
-      int idx = path->m_events.length () - 1;
+      int idx = path->num_events () - 1;
       while (idx >= 0)
        {
          /* Prune [..., call, function-entry, return, ...] triples.  */
-         if (idx + 2 < (signed)path->m_events.length ()
-             && path->m_events[idx]->is_call_p ()
-             && path->m_events[idx + 1]->is_function_entry_p ()
-             && path->m_events[idx + 2]->is_return_p ())
+         if (idx + 2 < (signed)path->num_events ()
+             && path->get_checker_event (idx)->is_call_p ()
+             && path->get_checker_event (idx + 1)->is_function_entry_p ()
+             && path->get_checker_event (idx + 2)->is_return_p ())
            {
              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:"
                       " irrelevant call/entry/return: %s",
                       idx, idx + 2, desc.m_buffer);
@@ -1194,13 +1196,14 @@ diagnostic_manager::prune_interproc_events 
(checker_path *path) const
 
          /* Prune [..., call, return, ...] pairs
             (for -fanalyzer-verbosity=0).  */
-         if (idx + 1 < (signed)path->m_events.length ()
-             && path->m_events[idx]->is_call_p ()
-             && path->m_events[idx + 1]->is_return_p ())
+         if (idx + 1 < (signed)path->num_events ()
+             && path->get_checker_event (idx)->is_call_p ()
+             && path->get_checker_event (idx + 1)->is_return_p ())
            {
              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:"
                       " irrelevant call/return: %s",
                       idx, idx + 1, desc.m_buffer);
@@ -1230,10 +1233,10 @@ diagnostic_manager::finish_pruning (checker_path *path) 
const
 {
   if (!path->interprocedural_p ())
     {
-      int idx = path->m_events.length () - 1;
-      while (idx >= 0 && idx < (signed)path->m_events.length ())
+      int idx = path->num_events () - 1;
+      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)
            {
              log ("filtering event %i:"
-- 
2.21.0

Reply via email to