30 object_whole_code_type.return_type(),
40 for(
const auto &
id : ids)
42 if(identifiers.find(
id) != identifiers.end())
50 const loopt &loop_instructions,
56 get_assigns(local_may_alias, loop_instructions, assigns);
59 std::unordered_set<irep_idt> loop_locals;
60 for(
const auto &target : loop_instructions)
63 loop_locals.insert(target->decl_symbol().get_identifier());
71 for(
const auto &expr : assigns)
77 for(
const auto &root_object : root_objects)
83 root_object.source_location();
100 result.emplace(expr);
Operator to return the address of an object.
Base class for all expressions.
source_locationt & add_source_location()
const source_locationt & source_location() const
A class containing utility functions for havocing expressions.
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
A side_effect_exprt representation of a function call side effect.
class symbol_exprt symbol_expr() const
Produces a symbol_exprt for a symbol.
typet type
Type of symbol.
static const exprt::operandst & get_assigns(const goto_programt::const_targett &latch_target)
Extracts the assigns clause expression from the latch condition.
assignst dfcc_infer_loop_assigns(const local_may_aliast &local_may_alias, const loopt &loop_instructions, const source_locationt &loop_head_location, const namespacet &ns)
static exprt make_object_whole_call_expr(const exprt &expr, const namespacet &ns)
Builds a call expression object_whole(expr)
static bool depends_on(const exprt &expr, std::unordered_set< irep_idt > identifiers)
Returns true iff expr contains at least one identifier found in identifiers.
Infer a set of assigns clause targets for a natural loop.
std::unordered_set< exprt, irep_hash > dfcc_root_objects(const exprt &expr)
Computes a set of root object expressions from an lvalue or assigns clause target expression.
Utility functions that compute root object expressions for assigns clause targets and LHS expressions...
find_symbols_sett find_symbol_identifiers(const exprt &src)
Find identifiers of the sub expressions with id ID_symbol, considering both free and bound variables.
Utilities for building havoc code for expressions.
std::set< exprt > assignst
natural_loops_mutablet::natural_loopt loopt
API to expression classes for Pointers.
const code_typet & to_code_type(const typet &type)
Cast a typet to a code_typet.
bool is_constant(const typet &type)
This method tests, if the given typet is a constant.