Go to the documentation of this file.
20 if(instruction.is_start_thread())
36 assert(end->is_end_function());
52 end->source_location_nonconst().set_comment(
53 "mutexes must not be locked on thread exit");
59 std::set<irep_idt> thread_fkts;
67 for(
const auto &instruction : gf_entry.second.body.instructions)
68 if(instruction.is_function_call())
70 const exprt &
function = instruction.call_function();
71 if(
function.
id()==ID_symbol)
78 for(
const auto &fkt : thread_fkts)
88 symbol_tablet::symbolst::const_iterator f_it =
91 if(f_it==symbol_table.
symbols.end())
98 if(it->assign_lhs().type() == lock_type)
101 f_it->second.symbol_expr(),
102 {address_of_exprt(it->assign_lhs()),
103 address_of_exprt(string_constantt(
"mutex-init"))});
116 symbol_tablet::symbolst::const_iterator lock_entry =
129 if(lock_type.
id()!=ID_pointer)
136 gf_entry.second.body,
#define Forall_goto_program_instructions(it, program)
void mutex_init_instrumentation(const symbol_tablet &symbol_table, goto_programt &goto_program, typet lock_type)
The type of an expression, extends irept.
Base class for all expressions.
function_mapt function_map
static bool has_start_thread(const goto_programt &goto_program)
static instructiont make_function_call(const code_function_callt &_code, const source_locationt &l=source_locationt::nil())
Create a function call instruction.
goto_instruction_codet representation of a function call statement.
const code_typet & to_code_type(const typet &type)
Cast a typet to a code_typet.
static instructiont make_assertion(const exprt &g, const source_locationt &l=source_locationt::nil())
The null pointer constant.
static optionalt< smt_termt > get_identifier(const exprt &expr, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_handle_identifiers, const std::unordered_map< exprt, smt_identifier_termt, irep_hash > &expression_identifiers)
A base class for expressions that are predicates, i.e., Boolean-typed, and that take exactly two argu...
const pointer_typet & to_pointer_type(const typet &type)
Cast a typet to a pointer_typet.
pointer_typet pointer_type(const typet &subtype)
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const irep_idt & id() const
const parameterst & parameters() const
instructionst instructions
The list of instructions in the goto program.
goto_functionst goto_functions
GOTO functions.
const symbolst & symbols
Read-only field, used to look up symbols given their names.
A generic container class for the GOTO intermediate representation of one function.
targett insert_after(const_targett target)
Insertion after the instruction pointed-to by the given instruction iterator target.
Operator to return the address of an object.
void insert_before_swap(targett target)
Insertion that preserves jumps to "target".
void thread_exit_instrumentation(goto_programt &goto_program)
const source_locationt & source_location() const
symbol_tablet symbol_table
Symbol table.
instructionst::iterator targett