diff options
author | David Malcolm <dmalcolm@redhat.com> | 2020-03-17 14:43:43 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2020-03-18 09:56:49 -0400 |
commit | 7d9c107ab1eab331e7011513b11e26b78850d614 (patch) | |
tree | ec08870a947171b41c74f6b160abd2fc38fae36a /gcc | |
parent | 0db2cd177020920e187ef47791d52cf689133a25 (diff) | |
download | gcc-7d9c107ab1eab331e7011513b11e26b78850d614.zip gcc-7d9c107ab1eab331e7011513b11e26b78850d614.tar.gz gcc-7d9c107ab1eab331e7011513b11e26b78850d614.tar.bz2 |
analyzer: introduce noop_region_model_context
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/analyzer/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/analyzer/region-model.h | 84 |
2 files changed, 32 insertions, 61 deletions
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index ace456c..110a845 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,5 +1,14 @@ 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 here from header; accept point_and_state by const reference rather than by value. diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h index c1fe592..035b611 100644 --- a/gcc/analyzer/region-model.h +++ b/gcc/analyzer/region-model.h @@ -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 { |