63 for(object_sett::const_iterator
117 const exprt &rhs)
const
128 std::set<exprt> result;
130 for(object_sett::const_iterator
159 std::list<unsigned> result;
161 std::set_intersection(
164 std::back_inserter(result));
166 return !result.empty();
259 "pointer in pointer-typed sum must be op0");
262 else if(
plus_expr.operands().size() == 2)
340 for(code_typet::parameterst::const_iterator
341 it=goto_function.type.parameters().begin();
342 it!=goto_function.type.parameters().end();
345 const irep_idt &identifier=it->get_identifier();
346 if(is_tracked(identifier))
353 for(localst::locals_mapt::const_iterator
358 if(is_tracked(
l_it->first))
374 switch(instruction.
type())
398 const auto &lhs = instruction.
call_lhs();
424 DATA_INVARIANT(
false,
"Exceptions must be removed before analysis");
428 DATA_INVARIANT(
false,
"SET_RETURN_VALUE must be removed before analysis");
445 false,
"Unclear what is a safe over-approximation of OTHER");
450 DATA_INVARIANT(
false,
"Only complete instructions can be analyzed");
454 for(local_cfgt::successorst::const_iterator
474 out <<
"**** " << instruction.source_location() <<
"\n";
478 for(std::size_t
i=0;
i<
loc_info.aliases.size();
i++)
484 for(std::size_t
j=0;
j<
loc_info.aliases.size();
j++)
bitvector_typet c_index_type()
Operator to return the address of an object.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
bool is_zero() const
Return whether the expression is a constant representing 0.
typet & type()
Return the type of the expression.
A goto function, consisting of function body (see body) and parameter identifiers (see parameter_iden...
This class represents an instruction in the GOTO intermediate representation.
const symbol_exprt & dead_symbol() const
Get the symbol for DEAD.
const exprt & call_lhs() const
Get the lhs of a FUNCTION_CALL (may be nil)
const symbol_exprt & decl_symbol() const
Get the declared symbol for DECL.
const exprt & assign_lhs() const
Get the lhs of the assignment for ASSIGN.
const exprt & assign_rhs() const
Get the rhs of the assignment for ASSIGN.
goto_program_instruction_typet type() const
What kind of instruction?
instructionst instructions
The list of instructions in the goto program.
instructionst::const_iterator const_targett
std::ostream & output_instruction(const namespacet &ns, const irep_idt &identifier, std::ostream &out, const instructionst::value_type &instruction) const
Output a single instruction.
const irep_idt & id() const
goto_programt::const_targett t
bool merge(const loc_infot &src)
void output(std::ostream &out, const goto_functiont &goto_function, const namespacet &ns) const
void assign_lhs(const exprt &lhs, const exprt &rhs, const loc_infot &loc_info_src, loc_infot &loc_info_dest)
void build(const goto_functiont &goto_function)
numberingt< exprt, irep_hash > objects
std::set< exprt > get(const goto_programt::const_targett t, const exprt &src) const
void get_rec(object_sett &dest, const exprt &rhs, const loc_infot &loc_info_src) const
std::stack< local_cfgt::node_nrt > work_queuet
bool aliases(const goto_programt::const_targett t, const exprt &src1, const exprt &src2) const
std::set< unsigned > object_sett
bool is_local(const irep_idt &identifier) const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
number_type number(const key_type &a)
An expression containing a side effect.
const irep_idt & get_identifier() const
size_type find(size_type a) const
void make_union(size_type a, size_type b)
bool same_set(size_type a, size_type b) const
std::string from_expr(const namespacet &ns, const irep_idt &identifier, const exprt &expr)
Field-insensitive, location-sensitive may-alias analysis.
API to expression classes for Pointers.
const address_of_exprt & to_address_of_expr(const exprt &expr)
Cast an exprt to an address_of_exprt.
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
side_effect_exprt & to_side_effect_expr(exprt &expr)
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
const typecast_exprt & to_typecast_expr(const exprt &expr)
Cast an exprt to a typecast_exprt.
const plus_exprt & to_plus_expr(const exprt &expr)
Cast an exprt to a plus_exprt.
const if_exprt & to_if_expr(const exprt &expr)
Cast an exprt to an if_exprt.
const member_exprt & to_member_expr(const exprt &expr)
Cast an exprt to a member_exprt.
const minus_exprt & to_minus_expr(const exprt &expr)
Cast an exprt to a minus_exprt.
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
void merge(string_constraintst &result, string_constraintst other)
Merge two sets of constraints by appending to the first one.