[gcc(refs/users/marxin/heads/marxin-gcc-benchmark-branch)] analyzer: cleanups to checker_path

Martin Liska marxin@gcc.gnu.org
Mon Mar 30 10:06:48 GMT 2020


https://gcc.gnu.org/g:e2a538b1c31a13fc3d2f6d8ac3f341437775e984

commit e2a538b1c31a13fc3d2f6d8ac3f341437775e984
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Fri Jan 3 09:26:16 2020 -0500

    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.

Diff:
---
 gcc/analyzer/ChangeLog             | 12 ++++++++++++
 gcc/analyzer/checker-path.h        |  8 ++++++++
 gcc/analyzer/diagnostic-manager.cc | 37 ++++++++++++++++++++-----------------
 3 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index 863bf3fe510..d5dd0cab724 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,3 +1,15 @@
+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.
diff --git a/gcc/analyzer/checker-path.h b/gcc/analyzer/checker-path.h
index 31d4004227d..20bab77b719 100644
--- a/gcc/analyzer/checker-path.h
+++ b/gcc/analyzer/checker-path.h
@@ -452,6 +452,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;
 
@@ -502,6 +507,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 ea2ff30b9a0..a00d9f74398 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -961,10 +961,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)
@@ -1096,7 +1096,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);
 	      }
 	  }
@@ -1193,18 +1194,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);
@@ -1220,13 +1222,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);
@@ -1256,10 +1259,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:"


More information about the Gcc-cvs mailing list