mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-11 08:50:46 +08:00
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.
This commit is contained in:
parent
0db2cd1770
commit
7d9c107ab1
@ -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
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user