76 for(
const auto &label : instruction.labels)
88 const typet &return_type,
92 if(!f.body.instructions.empty() &&
93 f.body.instructions.back().is_return())
97 if(!f.body.instructions.empty() &&
98 f.body.instructions.back().is_goto() &&
99 f.body.instructions.back().guard.is_true())
103 if(!f.body.instructions.empty())
146 if(f.body_available())
162 for(
const auto &p : f.parameter_identifiers)
166 "parameter identifier should not be empty",
172 "parameter identifier must be a known symbol",
212 !f.body.instructions.empty() &&
216 f.body.instructions.front().source_location());
217 f.body.insert_before_swap(f.body.instructions.begin(),
a_begin);
222 for(
auto &instruction : f.body.instructions)
224 if(instruction.is_goto() && instruction.get_target()->is_end_function())
225 instruction.set_target(
a_end);
lifetimet
Selects the kind of objects allocated.
@ STATIC_GLOBAL
Allocate global objects with static lifetime.
@ AUTOMATIC_LOCAL
Allocate local objects with automatic lifetime.
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Data structure for representing an arbitrary statement in a program.
const irep_idt & get_statement() const
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
bool starts_with(const char *s) const
equivalent of as_string().starts_with(s)
goto_convert_functionst(symbol_table_baset &_symbol_table, message_handlert &_message_handler)
void add_return(goto_functionst::goto_functiont &, const typet &return_type, const source_locationt &)
void goto_convert(goto_functionst &functions)
void convert_function(const irep_idt &identifier, goto_functionst::goto_functiont &result)
static bool hide(const goto_programt &)
virtual ~goto_convert_functionst()
symbol_table_baset & symbol_table
void goto_convert_rec(const codet &code, goto_programt &dest, const irep_idt &mode)
std::string tmp_symbol_prefix
struct goto_convertt::targetst targets
A collection of goto functions.
function_mapt function_map
::goto_functiont goto_functiont
void compute_location_numbers()
symbol_tablet symbol_table
Symbol table.
goto_functionst goto_functions
GOTO functions.
This class represents an instruction in the GOTO intermediate representation.
A generic container class for the GOTO intermediate representation of one function.
instructionst instructions
The list of instructions in the goto program.
static instructiont make_set_return_value(exprt return_value, const source_locationt &l=source_locationt::nil())
static instructiont make_end_function(const source_locationt &l=source_locationt::nil())
instructionst::iterator targett
instructionst::const_iterator const_targett
static instructiont make_atomic_end(const source_locationt &l=source_locationt::nil())
static instructiont make_atomic_begin(const source_locationt &l=source_locationt::nil())
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
A side_effect_exprt that returns a non-deterministically chosen value.
The symbol table base class interface.
const symbolst & symbols
Read-only field, used to look up symbols given their names.
bool has_symbol(const irep_idt &name) const
Check whether a symbol exists in the symbol table.
static symbol_table_buildert wrap(symbol_table_baset &base_symbol_table)
bool is_compiled() const
Returns true iff the the symbol's value has been compiled to a goto program.
typet type
Type of symbol.
irep_idt name
The unique identifier.
exprt value
Initial value of symbol.
irep_idt mode
Language mode.
The type of an expression, extends irept.
void goto_convert(goto_modelt &goto_model, message_handlert &message_handler)
Goto Programs with Functions.
const std::string & id2string(const irep_idt &d)
#define DATA_INVARIANT_WITH_DIAGNOSTICS(CONDITION, REASON,...)
#define INITIALIZE_FUNCTION
const code_blockt & to_code_block(const codet &code)
const codet & to_code(const exprt &expr)
const code_typet & to_code_type(const typet &type)
Cast a typet to a code_typet.