CBMC
abstract_pointer_objectt Class Referenceabstract

#include <abstract_pointer_object.h>

+ Inheritance diagram for abstract_pointer_objectt:
+ Collaboration diagram for abstract_pointer_objectt:

Public Member Functions

 abstract_pointer_objectt (const typet &type, bool top, bool bottom)
 Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true. More...
 
 abstract_pointer_objectt (const exprt &expr, const abstract_environmentt &environment, const namespacet &ns)
 
abstract_object_pointert expression_transform (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const override
 Interface for transforms. More...
 
abstract_object_pointert write (abstract_environmentt &environment, const namespacet &ns, const std::stack< exprt > &stack, const exprt &specifier, const abstract_object_pointert &value, bool merging_write) const override
 A helper function to evaluate writing to a component of an abstract object. More...
 
void get_statistics (abstract_object_statisticst &statistics, abstract_object_visitedt &visited, const abstract_environmentt &env, const namespacet &ns) const override
 
virtual abstract_object_pointert read_dereference (const abstract_environmentt &env, const namespacet &ns) const =0
 A helper function to read elements from an array. More...
 
virtual abstract_object_pointert write_dereference (abstract_environmentt &environment, const namespacet &ns, const std::stack< exprt > &stack, const abstract_object_pointert &value, bool merging_write) const =0
 Evaluate writing to a pointer's value. More...
 
virtual abstract_object_pointert typecast (const typet &new_type, const abstract_environmentt &environment, const namespacet &ns) const =0
 
virtual abstract_object_pointert ptr_diff (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const =0
 
virtual exprt ptr_comparison_expr (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const =0
 
- Public Member Functions inherited from abstract_objectt
 abstract_objectt (const typet &type, bool top, bool bottom)
 Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true. More...
 
 abstract_objectt (const exprt &expr, const abstract_environmentt &environment, const namespacet &ns)
 Construct an abstract object from the expression. More...
 
virtual ~abstract_objectt ()
 
virtual const typettype () const
 Get the real type of the variable this abstract object is representing. More...
 
virtual bool is_top () const
 Find out if the abstract object is top. More...
 
virtual bool is_bottom () const
 Find out if the abstract object is bottom. More...
 
virtual bool verify () const
 Verify the internal structure of an abstract_object is correct. More...
 
virtual exprt to_constant () const
 Converts to a constant expression if possible. More...
 
exprt to_predicate (const exprt &name) const
 Converts to an invariant expression. More...
 
virtual void output (std::ostream &out, const class ai_baset &ai, const namespacet &ns) const
 Print the value of the abstract object. More...
 
virtual bool has_been_modified (const abstract_object_pointert &before) const
 Determine whether 'this' abstract_object has been modified in comparison to a previous 'before' state. More...
 
virtual abstract_object_pointert meet (const abstract_object_pointert &other) const
 Base implementation of the meet operation: only used if no more precise abstraction can be used, can only result in {TOP, BOTTOM, one of the original objects}. More...
 
virtual abstract_object_pointert write_location_context (const locationt &location) const
 Update the write location context for an abstract object. More...
 
virtual abstract_object_pointert merge_location_context (const locationt &location) const
 Update the merge location context for an abstract object. More...
 
abstract_object_pointert make_top () const
 
abstract_object_pointert clear_top () const
 
virtual abstract_object_pointert unwrap_context () const
 
virtual abstract_object_pointert visit_sub_elements (const abstract_object_visitort &visitor) const
 Apply a visitor operation to all sub elements of this abstract_object. More...
 
virtual size_t internal_hash () const
 
virtual bool internal_equality (const abstract_object_pointert &other) const
 
virtual exprt to_predicate_internal (const exprt &name) const
 to_predicate implementation - derived classes will override More...
 

Private Member Functions

abstract_object_pointert typecast_from_void_ptr (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const
 
abstract_object_pointert eval_ptr_diff (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const
 
abstract_object_pointert eval_ptr_comparison (const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns) const
 

Additional Inherited Members

- Public Types inherited from abstract_objectt
typedef goto_programt::const_targett locationt
 
typedef sharing_mapt< irep_idt, abstract_object_pointert, false, irep_id_hashshared_mapt
 
- Static Public Member Functions inherited from abstract_objectt
static void dump_map (std::ostream out, const shared_mapt &m)
 
static void dump_map_diff (std::ostream out, const shared_mapt &m1, const shared_mapt &m2)
 Dump all elements in m1 that are different or missing in m2. More...
 
static combine_result merge (const abstract_object_pointert &op1, const abstract_object_pointert &op2, const locationt &merge_location, const widen_modet &widen_mode)
 
static combine_result merge (const abstract_object_pointert &op1, const abstract_object_pointert &op2, const widen_modet &widen_mode)
 
static combine_result meet (const abstract_object_pointert &op1, const abstract_object_pointert &op2)
 Interface method for the meet operation. More...
 
- Protected Types inherited from abstract_objectt
template<class T >
using internal_sharing_ptrt = std::shared_ptr< T >
 
typedef internal_sharing_ptrt< class abstract_objecttinternal_abstract_object_pointert
 
- Protected Member Functions inherited from abstract_objectt
virtual internal_abstract_object_pointert mutable_clone () const
 
abstract_object_pointert abstract_object_merge (const abstract_object_pointert &other) const
 Create a new abstract object that is the result of the merge, unless the object would be unchanged, then would return itself. More...
 
bool should_use_base_merge (const abstract_object_pointert &other) const
 To detect the cases where the base merge is sufficient to do a merge We can't do if this->is_bottom() since we want the specific. More...
 
virtual abstract_object_pointert merge (const abstract_object_pointert &other, const widen_modet &widen_mode) const
 Create a new abstract object that is the result of the merge, unless the object would be unchanged, then would return itself. More...
 
abstract_object_pointert abstract_object_meet (const abstract_object_pointert &other) const
 Helper function for base meet. More...
 
bool should_use_base_meet (const abstract_object_pointert &other) const
 Helper function to decide if base meet implementation should be used. More...
 
void set_top ()
 
void set_not_top ()
 
void set_not_bottom ()
 

Detailed Description

Definition at line 20 of file abstract_pointer_object.h.

Constructor & Destructor Documentation

◆ abstract_pointer_objectt() [1/2]

abstract_pointer_objectt::abstract_pointer_objectt ( const typet type,
bool  top,
bool  bottom 
)

Start the abstract object at either top or bottom or neither Asserts if both top and bottom are true.

Parameters
typethe type the abstract_object is representing
topis the abstract_object starting as top
bottomis the abstract_object starting as bottom

Definition at line 16 of file abstract_pointer_object.cpp.

◆ abstract_pointer_objectt() [2/2]

abstract_pointer_objectt::abstract_pointer_objectt ( const exprt expr,
const abstract_environmentt environment,
const namespacet ns 
)
explicit
Parameters
exprthe expression to use as the starting pointer for an abstract object
environmentthe environment in which the pointer is being created
nsthe current namespace

Definition at line 25 of file abstract_pointer_object.cpp.

Member Function Documentation

◆ eval_ptr_comparison()

abstract_object_pointert abstract_pointer_objectt::eval_ptr_comparison ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
private

Definition at line 107 of file abstract_pointer_object.cpp.

◆ eval_ptr_diff()

abstract_object_pointert abstract_pointer_objectt::eval_ptr_diff ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
private

Definition at line 95 of file abstract_pointer_object.cpp.

◆ expression_transform()

abstract_object_pointert abstract_pointer_objectt::expression_transform ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
overridevirtual

Interface for transforms.

Parameters
exprthe expression to evaluate and find the result of it. This will be the symbol referred to be op0()
operandsan abstract_object (pointer) that represent the possible values of each operand
environmentthe abstract environment in which the expression is being evaluated
nsthe current variable namespace
Returns
Returns the abstract_object representing the result of this expression to the maximum precision available.

To try and resolve different expressions with the maximum level of precision available.

Reimplemented from abstract_objectt.

Definition at line 37 of file abstract_pointer_object.cpp.

◆ get_statistics()

void abstract_pointer_objectt::get_statistics ( abstract_object_statisticst statistics,
abstract_object_visitedt visited,
const abstract_environmentt env,
const namespacet ns 
) const
overridevirtual

Reimplemented from abstract_objectt.

Reimplemented in constant_pointer_abstract_objectt.

Definition at line 70 of file abstract_pointer_object.cpp.

◆ ptr_comparison_expr()

virtual exprt abstract_pointer_objectt::ptr_comparison_expr ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
pure virtual

◆ ptr_diff()

virtual abstract_object_pointert abstract_pointer_objectt::ptr_diff ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
pure virtual

◆ read_dereference()

virtual abstract_object_pointert abstract_pointer_objectt::read_dereference ( const abstract_environmentt env,
const namespacet ns 
) const
pure virtual

A helper function to read elements from an array.

More precise abstractions may override this to provide more precise results.

Parameters
envthe environment
nsthe namespace
Returns
An abstract object representing the value being pointed to

Implemented in value_set_pointer_abstract_objectt, two_value_pointer_abstract_objectt, and constant_pointer_abstract_objectt.

◆ typecast()

virtual abstract_object_pointert abstract_pointer_objectt::typecast ( const typet new_type,
const abstract_environmentt environment,
const namespacet ns 
) const
pure virtual

◆ typecast_from_void_ptr()

abstract_object_pointert abstract_pointer_objectt::typecast_from_void_ptr ( const exprt expr,
const std::vector< abstract_object_pointert > &  operands,
const abstract_environmentt environment,
const namespacet ns 
) const
private

Definition at line 80 of file abstract_pointer_object.cpp.

◆ write()

abstract_object_pointert abstract_pointer_objectt::write ( abstract_environmentt environment,
const namespacet ns,
const std::stack< exprt > &  stack,
const exprt specifier,
const abstract_object_pointert value,
bool  merging_write 
) const
overridevirtual

A helper function to evaluate writing to a component of an abstract object.

More precise abstractions may override this to update what they are storing for a specific component.

Parameters
environmentthe abstract environment
nsthe current namespace
stackthe remaining stack of expressions on the LHS to evaluate
specifierthe expression uses to access a specific component
valuethe value we are trying to write to the component
merging_writeif true, this and all future writes will be merged with the current value
Returns
the abstract_objectt representing the result of writing to a specific component.

Reimplemented from abstract_objectt.

Definition at line 59 of file abstract_pointer_object.cpp.

◆ write_dereference()

virtual abstract_object_pointert abstract_pointer_objectt::write_dereference ( abstract_environmentt environment,
const namespacet ns,
const std::stack< exprt > &  stack,
const abstract_object_pointert value,
bool  merging_write 
) const
pure virtual

Evaluate writing to a pointer's value.

More precise abstractions may override this provide more precise results.

Parameters
environmentthe abstract environment
nsthe namespace
stackthe remaining stack of expressions on the LHS to evaluate
valuethe value we are trying to assign to what the pointer is pointing to
merging_writeis it a merging write (i.e. we aren't certain we are writing to this particular pointer therefore the value should be merged with whatever is already there or we are certain we are writing to this pointer so therefore the value can be replaced
Returns
A modified abstract object representing this pointer after it has been written to.

Implemented in two_value_pointer_abstract_objectt, constant_pointer_abstract_objectt, and value_set_pointer_abstract_objectt.


The documentation for this class was generated from the following files: