25 template <
class context_
classt>
30 new context_classt{abstract_object, abstract_object->type(),
true,
false});
33 template <
class abstract_
object_
classt>
43 return std::make_shared<abstract_object_classt>(type, top, bottom);
46 return std::make_shared<abstract_object_classt>(e, environment, ns);
54 return create_context_abstract_object<liveness_contextt>(abstract_object);
57 return create_context_abstract_object<data_dependency_contextt>(
61 return create_context_abstract_object<write_location_contextt>(
64 return abstract_object;
83 template <
class abstract_
object_
classt>
93 auto abstract_object = create_abstract_object<abstract_object_classt>(
94 type, top, bottom, e, environment, ns);
101 const typet &type)
const
106 type.
id() == ID_signedbv || type.
id() == ID_unsignedbv ||
107 type.
id() == ID_fixedbv || type.
id() == ID_c_bool || type.
id() == ID_bool ||
108 type.
id() == ID_integer || type.
id() == ID_c_bit_field)
112 else if(type.
id() == ID_floatbv)
117 else if(type.
id() == ID_array)
121 else if(type.
id() == ID_pointer)
125 else if(type.
id() == ID_struct || type.
id() == ID_struct_tag)
129 else if(type.
id() == ID_union || type.
id() == ID_union_tag)
133 else if(type.
id() == ID_dynamic_object)
138 return abstract_object_type;
152 switch(abstract_object_type)
155 return initialize_abstract_object<abstract_objectt>(
158 return initialize_abstract_object<constant_abstract_valuet>(
161 return initialize_abstract_object<interval_abstract_valuet>(
164 return initialize_abstract_object<value_set_abstract_objectt>(
168 return initialize_abstract_object<two_value_array_abstract_objectt>(
171 return initialize_abstract_object<full_array_abstract_objectt>(
175 return initialize_abstract_object<two_value_pointer_abstract_objectt>(
178 return initialize_abstract_object<constant_pointer_abstract_objectt>(
181 return initialize_abstract_object<value_set_pointer_abstract_objectt>(
185 return initialize_abstract_object<two_value_struct_abstract_objectt>(
188 return initialize_abstract_object<full_struct_abstract_objectt>(
192 return initialize_abstract_object<two_value_union_abstract_objectt>(
197 auto dynamic_object =
exprt(ID_dynamic_object);
200 auto heap_symbol =
unary_exprt(ID_address_of, dynamic_object, e.
type());
208 return initialize_abstract_object<abstract_objectt>(
sharing_ptrt< class abstract_objectt > abstract_object_pointert
floatbv_typet float_type()
Base class for all expressions.
typet & type()
Return the type of the expression.
const irep_idt & id() const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
The type of an expression, extends irept.
Generic base class for unary expressions.
abstract_object_pointert get_abstract_object(const typet &type, bool top, bool bottom, const exprt &e, const abstract_environmentt &environment, const namespacet &ns) const
Get the appropriate abstract object for the variable under consideration.
abstract_object_pointert wrap_with_context(const abstract_object_pointert &abstract_object) const
vsd_configt configuration
ABSTRACT_OBJECT_TYPET get_abstract_object_type(const typet &type) const
Decide which abstract object type to use for the variable in question.
An abstraction of a single value that just stores a constant.
An abstraction of a pointer that tracks a single pointer.
Maintain data dependencies as a context in the variable sensitivity domain.
An abstraction of an array value.
An abstraction of a structure that stores one abstract object per field.
An interval to represent a set of possible values.
Maintain a context in the variable sensitvity domain that records the liveness region for a given abs...
#define UNREACHABLE
This should be used to mark dead code.
#define PRECONDITION(CONDITION)
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
ABSTRACT_OBJECT_TYPET union_abstract_type
struct vsd_configt::@0 context_tracking
ABSTRACT_OBJECT_TYPET pointer_abstract_type
bool data_dependency_context
ABSTRACT_OBJECT_TYPET struct_abstract_type
ABSTRACT_OBJECT_TYPET array_abstract_type
ABSTRACT_OBJECT_TYPET value_abstract_type
The base type of all abstract array representations.
The base of all structure abstractions.
The base of all union abstractions.
Value Set Abstract Object.
Value Set of Pointer Abstract Object.
abstract_object_pointert create_context_abstract_object(const abstract_object_pointert &abstract_object)
abstract_object_pointert initialize_abstract_object(const typet type, bool top, bool bottom, const exprt &e, const abstract_environmentt &environment, const namespacet &ns, const vsd_configt &configuration)
Function: variable_sensitivity_object_factoryt::initialize_abstract_object Initialize the abstract ob...
abstract_object_pointert create_abstract_object(const typet type, bool top, bool bottom, const exprt &e, const abstract_environmentt &environment, const namespacet &ns)
abstract_object_pointert wrap_with_context_object(const abstract_object_pointert &abstract_object, const vsd_configt &configuration)
Tracks the user-supplied configuration for VSD and build the correct type of abstract object when nee...