Go to the documentation of this file.
35 typedef std::list<value_set_fit::entryt> entry_listt;
46 typedef std::unordered_map<irep_idt, entry_listt> entry_cachet;
47 entry_cachet entry_cache;
51 for(goto_programt::instructionst::const_iterator
58 for(goto_programt::decl_identifierst::const_iterator
64 entry_cachet::const_iterator e_it=entry_cache.find(*l_it);
66 if(e_it==entry_cache.end())
70 std::list<value_set_fit::entryt> &entries=entry_cache[*l_it];
82 std::list<value_set_fit::entryt> &dest)
89 const std::string &suffix,
91 std::list<value_set_fit::entryt> &dest)
95 if(t.
id()==ID_struct ||
101 identifier, suffix +
"." +
id2string(c.get_name()), c.type(), dest);
104 else if(t.
id()==ID_array)
107 identifier, suffix +
"[]",
to_array_type(t).element_type(), dest);
119 std::list<value_set_fit::entryt> globals;
128 std::set<irep_idt> locals;
135 std::list<value_set_fit::entryt> entries;
143 std::list<value_set_fit::entryt> &dest)
148 if(symbol_pair.second.is_lvalue && symbol_pair.second.is_static_lifetime)
157 if(type.
id()==ID_pointer)
162 {
return true;
break; }
165 if(type.
id()==ID_pointer)
167 const typet *t = &type;
168 while(t->
id() == ID_pointer)
171 return (t->
id()==ID_code);
180 else if(type.
id()==ID_struct ||
189 else if(type.
id()==ID_array)
191 else if(type.
id() == ID_struct_tag || type.
id() == ID_union_tag)
const componentst & components() const
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
const struct_union_typet & to_struct_union_type(const typet &type)
Cast a typet to a struct_union_typet.
The type of an expression, extends irept.
void get_entries_rec(const irep_idt &identifier, const std::string &suffix, const typet &type, std::list< value_set_fit::entryt > &dest)
typet type
Type of symbol.
Base class for all expressions.
void get_decl_identifiers(decl_identifierst &decl_identifiers) const
get the variables in decl statements
unsigned from_target_index
function_mapt function_map
virtual void initialize(const goto_programt &)
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
void initialize(const goto_programt &goto_program) override
const std::string & id2string(const irep_idt &d)
std::vector< exprt > get_value_set(const exprt &expr, const namespacet &ns) const
const pointer_typet & to_pointer_type(const typet &type)
Cast a typet to a pointer_typet.
void get_globals(std::list< value_set_fit::entryt > &dest)
const irep_idt & id() const
void get_local_identifiers(const goto_functiont &goto_function, std::set< irep_idt > &dest)
Return in dest the identifiers of the local variables declared in the goto_function and the identifie...
bool check_type(const typet &type)
std::vector< exprt > get_values(const irep_idt &function_id, locationt l, const exprt &expr) override
@ TRACK_FUNCTION_POINTERS
instructionst instructions
The list of instructions in the goto program.
value_set_domain_fit state
A collection of goto functions.
goto_programt::const_targett locationt
const symbol_table_baset & get_symbol_table() const
Return first symbol table registered with the namespace.
const typet & follow(const typet &) const
Resolve type symbol to the type it points to.
number_type number(const key_type &a)
const symbolst & symbols
Read-only field, used to look up symbols given their names.
void get_entries(const symbolt &symbol, std::list< value_set_fit::entryt > &dest)
const typet & base_type() const
The type of the data what we point to.
const array_typet & to_array_type(const typet &type)
Cast a typet to an array_typet.
A generic container class for the GOTO intermediate representation of one function.
static numberingt< irep_idt > function_numbering
void add_vars(const std::list< entryt > &vars)
track_optionst track_options
void add_vars(const goto_functionst &goto_functions)
std::set< irep_idt > decl_identifierst
irep_idt name
The unique identifier.
const typet & element_type() const
The type of the elements of the array.