public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-3634] analyzer: use std::unique_ptr during bifurcation
@ 2022-11-03 17:48 David Malcolm
  0 siblings, 0 replies; only message in thread
From: David Malcolm @ 2022-11-03 17:48 UTC (permalink / raw)
  To: gcc-cvs

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

commit r13-3634-gaccece8c9543e4f3f7bbf24989755dd0453658b7
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Thu Nov 3 13:47:02 2022 -0400

    analyzer: use std::unique_ptr during bifurcation
    
    gcc/analyzer/ChangeLog:
            * analysis-plan.cc: Define INCLUDE_MEMORY before including
            system.h.
            * analyzer-pass.cc: Likewise.
            * analyzer-selftests.cc: Likewise.
            * analyzer.cc: Likewise.
            * analyzer.h: Use std::unique_ptr in bifurcation code.
            * call-string.cc: Define INCLUDE_MEMORY before including system.h.
            * complexity.cc: Likewise.
            * engine.cc: Use std::unique_ptr in bifurcation code.
            * exploded-graph.h: Likewise.
            * known-function-manager.cc: Define INCLUDE_MEMORY before
            including system.h.
            * region-model-impl-calls.cc: Use std::unique_ptr in bifurcation
            code.
            * region-model.cc: Likewise.
            * region-model.h: Likewise.
            * supergraph.cc: Define INCLUDE_MEMORY before including system.h.
    
    gcc/testsuite/ChangeLog:
            * gcc.dg/plugin/analyzer_kernel_plugin.c: Include "make-unique.h".
            Use std::unique_ptr in bifurcation code.
            * gcc.dg/plugin/analyzer_known_fns_plugin.c: Likewise.
    
    Signed-off-by: David Malcolm <dmalcolm@redhat.com>

Diff:
---
 gcc/analyzer/analysis-plan.cc                          |  1 +
 gcc/analyzer/analyzer-pass.cc                          |  1 +
 gcc/analyzer/analyzer-selftests.cc                     |  1 +
 gcc/analyzer/analyzer.cc                               |  1 +
 gcc/analyzer/analyzer.h                                |  5 ++---
 gcc/analyzer/call-string.cc                            |  1 +
 gcc/analyzer/complexity.cc                             |  1 +
 gcc/analyzer/engine.cc                                 | 18 ++++++++----------
 gcc/analyzer/exploded-graph.h                          |  2 +-
 gcc/analyzer/known-function-manager.cc                 |  1 +
 gcc/analyzer/region-model-impl-calls.cc                | 12 ++++++------
 gcc/analyzer/region-model.cc                           |  3 +--
 gcc/analyzer/region-model.h                            | 11 +++++------
 gcc/analyzer/supergraph.cc                             |  1 +
 gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c   |  3 ++-
 .../gcc.dg/plugin/analyzer_known_fns_plugin.c          |  3 ++-
 16 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/gcc/analyzer/analysis-plan.cc b/gcc/analyzer/analysis-plan.cc
index a4a42c5cd3d..aa75bd6b67e 100644
--- a/gcc/analyzer/analysis-plan.cc
+++ b/gcc/analyzer/analysis-plan.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/analyzer/analyzer-pass.cc b/gcc/analyzer/analyzer-pass.cc
index fc7098ddccb..423595f45f0 100644
--- a/gcc/analyzer/analyzer-pass.cc
+++ b/gcc/analyzer/analyzer-pass.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "context.h"
diff --git a/gcc/analyzer/analyzer-selftests.cc b/gcc/analyzer/analyzer-selftests.cc
index 278c245f415..028cc5ed009 100644
--- a/gcc/analyzer/analyzer-selftests.cc
+++ b/gcc/analyzer/analyzer-selftests.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/analyzer/analyzer.cc b/gcc/analyzer/analyzer.cc
index 6c7c969538c..899202bb44c 100644
--- a/gcc/analyzer/analyzer.cc
+++ b/gcc/analyzer/analyzer.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/analyzer/analyzer.h b/gcc/analyzer/analyzer.h
index c41cfb01656..d8d3e78b20a 100644
--- a/gcc/analyzer/analyzer.h
+++ b/gcc/analyzer/analyzer.h
@@ -300,9 +300,8 @@ class path_context
 public:
   virtual ~path_context () {}
 
-  /* Hook for clients to split state with a non-standard path.
-     Take ownership of INFO.  */
-  virtual void bifurcate (custom_edge_info *info) = 0;
+  /* Hook for clients to split state with a non-standard path.  */
+  virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
 
   /* Hook for clients to terminate the standard path.  */
   virtual void terminate_path () = 0;
diff --git a/gcc/analyzer/call-string.cc b/gcc/analyzer/call-string.cc
index f0a30d9b2b6..5caf92155b9 100644
--- a/gcc/analyzer/call-string.cc
+++ b/gcc/analyzer/call-string.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "pretty-print.h"
diff --git a/gcc/analyzer/complexity.cc b/gcc/analyzer/complexity.cc
index 39fbbc133f4..2756f961d80 100644
--- a/gcc/analyzer/complexity.cc
+++ b/gcc/analyzer/complexity.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc
index 59a4e6f6097..d770c6fc29c 100644
--- a/gcc/analyzer/engine.cc
+++ b/gcc/analyzer/engine.cc
@@ -193,12 +193,10 @@ impl_region_model_context::purge_state_involving (const svalue *sval)
 }
 
 void
-impl_region_model_context::bifurcate (custom_edge_info *info)
+impl_region_model_context::bifurcate (std::unique_ptr<custom_edge_info> info)
 {
   if (m_path_ctxt)
-    m_path_ctxt->bifurcate (info);
-  else
-    delete info;
+    m_path_ctxt->bifurcate (std::move (info));
 }
 
 void
@@ -1646,10 +1644,10 @@ exploded_node::replay_call_summary (exploded_graph &eg,
   call_summary_replay r (cd, called_fn, summary, ext_state);
 
   if (path_ctxt)
-    path_ctxt->bifurcate (new call_summary_edge_info (cd,
-						      called_fn,
-						      summary,
-						      ext_state));
+    path_ctxt->bifurcate (make_unique<call_summary_edge_info> (cd,
+							       called_fn,
+							       summary,
+							       ext_state));
 }
 
 
@@ -3807,7 +3805,7 @@ public:
   }
 
   void
-  bifurcate (custom_edge_info *info) final override
+  bifurcate (std::unique_ptr<custom_edge_info> info) final override
   {
     if (m_state_at_bifurcation)
       /* Verify that the state at bifurcation is consistent when we
@@ -3820,7 +3818,7 @@ public:
 	= std::unique_ptr<program_state> (new program_state (*m_cur_state));
 
     /* Take ownership of INFO.  */
-    m_custom_eedge_infos.safe_push (info);
+    m_custom_eedge_infos.safe_push (info.release ());
   }
 
   void terminate_path () final override
diff --git a/gcc/analyzer/exploded-graph.h b/gcc/analyzer/exploded-graph.h
index 6a25003cd5a..8e3c160189c 100644
--- a/gcc/analyzer/exploded-graph.h
+++ b/gcc/analyzer/exploded-graph.h
@@ -90,7 +90,7 @@ class impl_region_model_context : public region_model_context
 
   void purge_state_involving (const svalue *sval) final override;
 
-  void bifurcate (custom_edge_info *info) final override;
+  void bifurcate (std::unique_ptr<custom_edge_info> info) final override;
   void terminate_path () final override;
   const extrinsic_state *get_ext_state () const final override
   {
diff --git a/gcc/analyzer/known-function-manager.cc b/gcc/analyzer/known-function-manager.cc
index 48fb005e37e..42dfe3af583 100644
--- a/gcc/analyzer/known-function-manager.cc
+++ b/gcc/analyzer/known-function-manager.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/analyzer/region-model-impl-calls.cc b/gcc/analyzer/region-model-impl-calls.cc
index 790dc64945e..30fa765c4b4 100644
--- a/gcc/analyzer/region-model-impl-calls.cc
+++ b/gcc/analyzer/region-model-impl-calls.cc
@@ -629,8 +629,8 @@ region_model::impl_call_pipe (const call_details &cd)
   /* Body of region_model::impl_call_pipe.  */
   if (cd.get_ctxt ())
     {
-      cd.get_ctxt ()->bifurcate (new failure (cd));
-      cd.get_ctxt ()->bifurcate (new success (cd));
+      cd.get_ctxt ()->bifurcate (make_unique<failure> (cd));
+      cd.get_ctxt ()->bifurcate (make_unique<success> (cd));
       cd.get_ctxt ()->terminate_path ();
     }
 }
@@ -1006,9 +1006,9 @@ region_model::impl_call_realloc (const call_details &cd)
 
   if (cd.get_ctxt ())
     {
-      cd.get_ctxt ()->bifurcate (new failure (cd));
-      cd.get_ctxt ()->bifurcate (new success_no_move (cd));
-      cd.get_ctxt ()->bifurcate (new success_with_move (cd));
+      cd.get_ctxt ()->bifurcate (make_unique<failure> (cd));
+      cd.get_ctxt ()->bifurcate (make_unique<success_no_move> (cd));
+      cd.get_ctxt ()->bifurcate (make_unique<success_with_move> (cd));
       cd.get_ctxt ()->terminate_path ();
     }
 }
@@ -1077,7 +1077,7 @@ region_model::impl_call_strchr (const call_details &cd)
 
   /* Bifurcate state, creating a "not found" out-edge.  */
   if (cd.get_ctxt ())
-    cd.get_ctxt ()->bifurcate (new strchr_call_info (cd, false));
+    cd.get_ctxt ()->bifurcate (make_unique<strchr_call_info> (cd, false));
 
   /* The "unbifurcated" state is the "found" case.  */
   strchr_call_info found (cd, true);
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 37b113fc978..edf3412a817 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -6416,9 +6416,8 @@ noop_region_model_context::add_note (std::unique_ptr<pending_note>)
 }
 
 void
-noop_region_model_context::bifurcate (custom_edge_info *info)
+noop_region_model_context::bifurcate (std::unique_ptr<custom_edge_info>)
 {
-  delete info;
 }
 
 void
diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h
index 91b17ce2ad9..5c0bc44a57a 100644
--- a/gcc/analyzer/region-model.h
+++ b/gcc/analyzer/region-model.h
@@ -729,9 +729,8 @@ class region_model_context
   /* Hook for clients to purge state involving SVAL.  */
   virtual void purge_state_involving (const svalue *sval) = 0;
 
-  /* Hook for clients to split state with a non-standard path.
-     Take ownership of INFO.  */
-  virtual void bifurcate (custom_edge_info *info) = 0;
+  /* Hook for clients to split state with a non-standard path.  */
+  virtual void bifurcate (std::unique_ptr<custom_edge_info> info) = 0;
 
   /* Hook for clients to terminate the standard path.  */
   virtual void terminate_path () = 0;
@@ -806,7 +805,7 @@ public:
 
   void purge_state_involving (const svalue *sval ATTRIBUTE_UNUSED) override {}
 
-  void bifurcate (custom_edge_info *info) override;
+  void bifurcate (std::unique_ptr<custom_edge_info> info) override;
   void terminate_path () override;
 
   const extrinsic_state *get_ext_state () const override { return NULL; }
@@ -918,9 +917,9 @@ class region_model_context_decorator : public region_model_context
     m_inner->purge_state_involving (sval);
   }
 
-  void bifurcate (custom_edge_info *info) override
+  void bifurcate (std::unique_ptr<custom_edge_info> info) override
   {
-    m_inner->bifurcate (info);
+    m_inner->bifurcate (std::move (info));
   }
 
   void terminate_path () override
diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index 0e9a32500cb..8195fe8e7f8 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -19,6 +19,7 @@ along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tree.h"
diff --git a/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c b/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c
index d1c29132e67..dfa30c8d61b 100644
--- a/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c
+++ b/gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c
@@ -42,6 +42,7 @@
 #include "analyzer/store.h"
 #include "analyzer/region-model.h"
 #include "analyzer/call-info.h"
+#include "make-unique.h"
 
 int plugin_is_GPL_compatible;
 
@@ -95,7 +96,7 @@ class copy_across_boundary_fn : public known_function
     if (ctxt)
       {
 	/* Bifurcate state, creating a "failure" out-edge.  */
-	ctxt->bifurcate (new copy_failure (cd));
+	ctxt->bifurcate (make_unique<copy_failure> (cd));
 
 	/* The "unbifurcated" state is the "success" case.  */
 	copy_success success (cd,
diff --git a/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c b/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c
index ccf69ed8338..5c1f3986aa7 100644
--- a/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c
+++ b/gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c
@@ -42,6 +42,7 @@
 #include "analyzer/store.h"
 #include "analyzer/region-model.h"
 #include "analyzer/call-info.h"
+#include "make-unique.h"
 
 int plugin_is_GPL_compatible;
 
@@ -152,7 +153,7 @@ public:
     if (cd.get_ctxt ())
       {
 	/* Bifurcate state, creating a "failure" out-edge.  */
-	cd.get_ctxt ()->bifurcate (new copy_failure (cd));
+	cd.get_ctxt ()->bifurcate (make_unique<copy_failure> (cd));
 
 	/* The "unbifurcated" state is the "success" case.  */
 	copy_success success (cd,

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-03 17:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-03 17:48 [gcc r13-3634] analyzer: use std::unique_ptr during bifurcation David Malcolm

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).