analyzer: introduce noop_region_model_context
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 17 Mar 2020 18:43:43 +0000 (14:43 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 18 Mar 2020 13:56:49 +0000 (09:56 -0400)
tentative_region_model_context and test_region_model_context are both
forced to implement numerous pure virtual vfuncs of the abstract
region_model_context.

This patch adds a noop_region_model_context which provides empty
implementations of all of region_model_context's pure virtual functions,
and subclasses the above classes from that, rather than from
region_model_context directly.

gcc/analyzer/ChangeLog:
* region-model.h (class noop_region_model_context): New subclass
of region_model_context.
(class tentative_region_model_context): Inherit from
noop_region_model_context rather than from region_model_context;
drop redundant vfunc implementations.
(class test_region_model_context): Likewise.

gcc/analyzer/ChangeLog
gcc/analyzer/region-model.h

index ace456c02d8e9cf6c0330243f5d222ccabc166f9..110a845edc808fc4dd526e6a620aa6b4c874d1a0 100644 (file)
@@ -1,3 +1,12 @@
+2020-03-18  David Malcolm  <dmalcolm@redhat.com>
+
+       * region-model.h (class noop_region_model_context): New subclass
+       of region_model_context.
+       (class tentative_region_model_context): Inherit from
+       noop_region_model_context rather than from region_model_context;
+       drop redundant vfunc implementations.
+       (class test_region_model_context): Likewise.
+
 2020-03-18  David Malcolm  <dmalcolm@redhat.com>
 
        * engine.cc (exploded_node::exploded_node): Move implementation
index c1fe592e30c364453a10b0b96ac06ec9d3c15b27..035b611b8130e712535f5a9bfbdc2856f9a38a13 100644 (file)
@@ -1972,42 +1972,50 @@ class region_model_context
                                        const dump_location_t &loc) = 0;
 };
 
-/* A subclass of region_model_context for determining if operations fail
-   e.g. "can we generate a region for the lvalue of EXPR?".  */
+/* A "do nothing" subclass of region_model_context.  */
 
-class tentative_region_model_context : public region_model_context
+class noop_region_model_context : public region_model_context
 {
 public:
-  tentative_region_model_context () : m_num_unexpected_codes (0) {}
-
-  void warn (pending_diagnostic *) FINAL OVERRIDE {}
-  void remap_svalue_ids (const svalue_id_map &) FINAL OVERRIDE {}
-  int on_svalue_purge (svalue_id, const svalue_id_map &) FINAL OVERRIDE
+  void warn (pending_diagnostic *) OVERRIDE {}
+  void remap_svalue_ids (const svalue_id_map &) OVERRIDE {}
+  int on_svalue_purge (svalue_id, const svalue_id_map &) OVERRIDE
   {
     return 0;
   }
-  logger *get_logger () FINAL OVERRIDE { return NULL; }
+  logger *get_logger () OVERRIDE { return NULL; }
   void on_inherited_svalue (svalue_id parent_sid ATTRIBUTE_UNUSED,
                            svalue_id child_sid  ATTRIBUTE_UNUSED)
-    FINAL OVERRIDE
+    OVERRIDE
   {
   }
   void on_cast (svalue_id src_sid ATTRIBUTE_UNUSED,
-               svalue_id dst_sid ATTRIBUTE_UNUSED) FINAL OVERRIDE
+               svalue_id dst_sid ATTRIBUTE_UNUSED) OVERRIDE
   {
   }
   void on_condition (tree lhs ATTRIBUTE_UNUSED,
                     enum tree_code op ATTRIBUTE_UNUSED,
-                    tree rhs ATTRIBUTE_UNUSED) FINAL OVERRIDE
+                    tree rhs ATTRIBUTE_UNUSED) OVERRIDE
   {
   }
-  void on_unknown_change (svalue_id sid ATTRIBUTE_UNUSED) FINAL OVERRIDE
+  void on_unknown_change (svalue_id sid ATTRIBUTE_UNUSED) OVERRIDE
   {
   }
   void on_phi (const gphi *phi ATTRIBUTE_UNUSED,
-              tree rhs ATTRIBUTE_UNUSED) FINAL OVERRIDE
+              tree rhs ATTRIBUTE_UNUSED) OVERRIDE
   {
   }
+  void on_unexpected_tree_code (tree, const dump_location_t &) OVERRIDE {}
+};
+
+/* A subclass of region_model_context for determining if operations fail
+   e.g. "can we generate a region for the lvalue of EXPR?".  */
+
+class tentative_region_model_context : public noop_region_model_context
+{
+public:
+  tentative_region_model_context () : m_num_unexpected_codes (0) {}
+
   void on_unexpected_tree_code (tree, const dump_location_t &)
     FINAL OVERRIDE
   {
@@ -2143,7 +2151,7 @@ using namespace ::selftest;
 /* An implementation of region_model_context for use in selftests, which
    stores any pending_diagnostic instances passed to it.  */
 
-class test_region_model_context : public region_model_context
+class test_region_model_context : public noop_region_model_context
 {
 public:
   void warn (pending_diagnostic *d) FINAL OVERRIDE
@@ -2151,54 +2159,8 @@ public:
     m_diagnostics.safe_push (d);
   }
 
-  void remap_svalue_ids (const svalue_id_map &) FINAL OVERRIDE
-  {
-    /* Empty.  */
-  }
-
-#if 0
-  bool can_purge_p (svalue_id) FINAL OVERRIDE
-  {
-    return true;
-  }
-#endif
-
-  int on_svalue_purge (svalue_id, const svalue_id_map &) FINAL OVERRIDE
-  {
-    /* Empty.  */
-    return 0;
-  }
-
-  logger *get_logger () FINAL OVERRIDE { return NULL; }
-
-  void on_inherited_svalue (svalue_id parent_sid ATTRIBUTE_UNUSED,
-                           svalue_id child_sid  ATTRIBUTE_UNUSED)
-    FINAL OVERRIDE
-  {
-  }
-
-  void on_cast (svalue_id src_sid ATTRIBUTE_UNUSED,
-               svalue_id dst_sid ATTRIBUTE_UNUSED) FINAL OVERRIDE
-  {
-  }
-
   unsigned get_num_diagnostics () const { return m_diagnostics.length (); }
 
-  void on_condition (tree lhs ATTRIBUTE_UNUSED,
-                    enum tree_code op ATTRIBUTE_UNUSED,
-                    tree rhs ATTRIBUTE_UNUSED) FINAL OVERRIDE
-  {
-  }
-
-  void on_unknown_change (svalue_id sid ATTRIBUTE_UNUSED) FINAL OVERRIDE
-  {
-  }
-
-  void on_phi (const gphi *phi ATTRIBUTE_UNUSED,
-              tree rhs ATTRIBUTE_UNUSED) FINAL OVERRIDE
-  {
-  }
-
   void on_unexpected_tree_code (tree t, const dump_location_t &)
     FINAL OVERRIDE
   {