Go to the documentation of this file.
45 std::map<irep_idt, goto_programt::targett> label_targets;
50 if(!it->labels.empty())
52 for(
auto label : it->labels)
54 label_targets.insert(std::make_pair(label, it));
62 instruction.is_catch() &&
63 instruction.code().get_statement() == ID_push_catch)
70 if(instruction.targets.empty())
72 bool handler_added=
true;
76 for(
const auto &handler : handler_list)
80 if(label_targets.find(handler.get_label())==label_targets.end())
90 for(
const auto &handler : handler_list)
91 instruction.targets.push_back(label_targets.at(handler.get_label()));
119 labelst::const_iterator l_it=
125 "goto label \'" +
id2string(goto_label) +
"\' not found",
129 i.
targets.push_back(l_it->second.first);
135 labelst::const_iterator l_it=
targets.
labels.find(goto_label);
140 "goto label \'" +
id2string(goto_label) +
"\' not found",
153 goto_target, label_target);
168 debug() <<
"encountered goto '" << goto_label
169 <<
"' that enters one or more lexical blocks; "
170 <<
"omitting constructors and destructors" <<
eom;
175 debug() <<
"adding goto-destructor code on jump to '" << goto_label
218 label_expr.
set(ID_identifier, label.first);
248 i.get_target()->target_number = (++cnt);
255 auto it_goto_y = std::next(it);
258 it_goto_y == dest.
instructions.end() || !it_goto_y->is_goto() ||
259 !it_goto_y->condition().is_true() || it_goto_y->is_target())
264 auto it_z = std::next(it_goto_y);
270 if(it->get_target()->target_number == it_z->target_number)
272 it->set_target(it_goto_y->get_target());
274 it_goto_y->turn_into_skip();
328 "code() in magic thread creation label is null");
346 target->labels.push_front(label);
385 case_op_dest.push_back(code.
case_op());
394 const auto lb = numeric_cast<mp_integer>(code.
lower());
395 const auto ub = numeric_cast<mp_integer>(code.
upper());
398 lb.has_value() && ub.has_value(),
399 "GCC's switch-case-range statement requires constant bounds",
405 warning() <<
"GCC's switch-case-range statement with empty case range"
424 cases_entry->second->second.push_back(
437 if(statement==ID_block)
439 else if(statement==ID_decl)
441 else if(statement==ID_decl_type)
443 else if(statement==ID_expression)
445 else if(statement==ID_assign)
447 else if(statement==ID_assert)
449 else if(statement==ID_assume)
451 else if(statement==ID_function_call)
453 else if(statement==ID_label)
455 else if(statement==ID_gcc_local_label)
457 else if(statement==ID_switch_case)
459 else if(statement==ID_gcc_switch_case_range)
462 else if(statement==ID_for)
464 else if(statement==ID_while)
466 else if(statement==ID_dowhile)
468 else if(statement==ID_switch)
470 else if(statement==ID_break)
472 else if(statement==ID_return)
474 else if(statement==ID_continue)
476 else if(statement==ID_goto)
478 else if(statement==ID_gcc_computed_goto)
480 else if(statement==ID_skip)
482 else if(statement==ID_ifthenelse)
484 else if(statement==ID_start_thread)
486 else if(statement==ID_end_thread)
488 else if(statement==ID_atomic_begin)
490 else if(statement==ID_atomic_end)
492 else if(statement==ID_cpp_delete ||
493 statement==
"cpp_delete[]")
495 else if(statement==ID_msc_try_except)
497 else if(statement==ID_msc_try_finally)
499 else if(statement==ID_msc_leave)
501 else if(statement==ID_try_catch)
503 else if(statement==ID_CPROVER_try_catch)
505 else if(statement==ID_CPROVER_throw)
507 else if(statement==ID_CPROVER_try_finally)
509 else if(statement==ID_asm)
511 else if(statement==ID_static_assert)
522 else if(statement==ID_dead)
524 else if(statement==ID_decl_block)
529 else if(statement==ID_push_catch ||
530 statement==ID_pop_catch ||
531 statement==ID_exception_landingpad)
620 symbol.
type.
id()==ID_code)
669 destructor.
arguments().push_back(this_expr);
692 if(rhs.id()==ID_side_effect &&
693 rhs.get(ID_statement)==ID_function_call)
698 rhs.operands().size() == 2,
699 "function_call sideeffect takes two operands",
700 rhs.find_source_location());
707 rhs_function_call.function(),
708 rhs_function_call.arguments(),
712 else if(rhs.id()==ID_side_effect &&
713 (rhs.get(ID_statement)==ID_cpp_new ||
714 rhs.get(ID_statement)==ID_cpp_new_array))
723 rhs.id() == ID_side_effect &&
724 (rhs.get(ID_statement) == ID_assign ||
725 rhs.get(ID_statement) == ID_postincrement ||
726 rhs.get(ID_statement) == ID_preincrement ||
727 rhs.get(ID_statement) == ID_statement_expression ||
728 rhs.get(ID_statement) == ID_gcc_conditional_expression))
734 new_assign.
lhs() = lhs;
735 new_assign.
rhs() = rhs;
739 else if(rhs.id() == ID_side_effect)
747 new_assign.
lhs()=lhs;
748 new_assign.
rhs()=rhs;
758 new_assign.
lhs()=lhs;
759 new_assign.
rhs()=rhs;
771 "cpp_delete statement takes one operand",
779 const exprt &destructor=
780 static_cast<const exprt &
>(code.
find(ID_destructor));
785 delete_identifier=
"__delete_array";
787 delete_identifier=
"__delete";
804 convert(tmp_code, dest, ID_cpp);
811 exprt delete_symbol=
ns.
lookup(delete_identifier).symbol_expr();
815 "delete statement takes 1 parameter");
824 convert(delete_call, dest, ID_cpp);
838 t->source_location_nonconst().set(
"user-provided",
true);
866 auto assigns =
static_cast<const unary_exprt &
>(code.
find(ID_C_spec_assigns));
867 if(assigns.is_not_nil())
870 loop->condition_nonconst().add(ID_C_spec_assigns).swap(assigns.op());
874 static_cast<const exprt &
>(code.
find(ID_C_spec_loop_invariant));
875 if(!invariant.is_nil())
884 loop->condition_nonconst().add(ID_C_spec_loop_invariant).swap(invariant);
887 auto decreases_clause =
888 static_cast<const exprt &
>(code.
find(ID_C_spec_decreases));
889 if(!decreases_clause.is_nil())
894 "Decreases clause is not side-effect free.",
899 loop->condition_nonconst().add(ID_C_spec_decreases).swap(decreases_clause);
1058 "dowhile takes two operands",
1106 y->complete_goto(w);
1127 disjuncts.reserve(case_op.size());
1129 for(
const auto &op : case_op)
1132 if(op.id() == ID_and)
1140 disjuncts.push_back(skeleton);
1203 convert(copy_value, sideeffects, mode);
1239 size_t case_number=1;
1242 const caset &case_ops=case_pair.second;
1244 if (case_ops.empty())
1255 case_pair.first, std::move(guard_expr), source_location));
1300 "return takes none or one operand",
1307 bool result_is_used=
1323 "function must return value",
1335 "function must not return value",
1354 "continue without target",
1406 "end_thread expects no operands",
1418 "atomic_begin expects no operands",
1430 ": atomic_end expects no operands",
1479 tmp_guard, tmp_then, tmp_else, source_location, dest, mode);
1485 std::list<exprt> &dest)
1489 dest.push_back(expr);
1531 true_case.
instructions.back().condition().is_false() &&
1549 false_case.
instructions.back().condition().is_false() &&
1554 false_case.
instructions.back().condition_nonconst() = guard;
1569 true_case.
instructions.front().condition().is_false() &&
1591 bool has_else=!
is_empty(false_case);
1623 tmp_y.
swap(false_case);
1630 boolean_negate(guard), has_else ? y : z, source_location, tmp_v, mode);
1634 tmp_w.
swap(true_case);
1638 x->complete_goto(z);
1639 x->source_location_nonconst() = tmp_w.
instructions.back().source_location();
1660 if(expr.
id()==ID_and || expr.
id()==ID_or)
1685 guard, target_true, target_false, source_location, dest, mode);
1708 if(guard.
id()==ID_not)
1721 if(guard.
id()==ID_and)
1730 std::list<exprt> op;
1733 for(
const auto &expr : op)
1735 boolean_negate(expr), target_false, source_location, dest, mode);
1741 else if(guard.
id()==ID_or)
1750 std::list<exprt> op;
1754 for(
const auto &expr : op)
1756 expr, target_true, source_location, dest, mode);
1778 if(expr.
id() == ID_typecast)
1782 expr.
id() == ID_address_of &&
1789 if(index_op.
id()==ID_string_constant)
1794 else if(index_op.
id()==ID_array)
1798 if(it->is_constant())
1800 const auto i = numeric_cast<std::size_t>(*it);
1805 result +=
static_cast<char>(i.value());
1808 return value=
result,
false;
1812 if(expr.
id()==ID_string_constant)
1828 "expected string constant",
1837 if(expr.
id()==ID_symbol)
1842 return symbol.
value;
1844 else if(expr.
id()==ID_member)
1848 return std::move(tmp);
1850 else if(expr.
id()==ID_index)
1855 return std::move(tmp);
1863 const std::string &suffix,
1886 const std::string &suffix,
1897 assignment.
rhs()=expr;
1900 convert(assignment, dest, mode);
1924 const symbol_tablet::symbolst::const_iterator s_it=
1925 symbol_table.
symbols.find(
"main");
1928 s_it != symbol_table.
symbols.end(),
"failed to find main symbol");
1930 const symbolt &symbol=s_it->second;
1958 convert(thread_body, body, mode);
#define Forall_goto_program_instructions(it, program)
static instructiont make_other(const goto_instruction_codet &_code, const source_locationt &l=source_locationt::nil())
#define UNREACHABLE
This should be used to mark dead code.
void convert_function_call(const code_function_callt &code, goto_programt &dest, const irep_idt &mode)
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
const irep_idt & get_identifier() const
const exprt & case_op() const
void convert_dowhile(const code_dowhilet &code, goto_programt &dest, const irep_idt &mode)
A codet representing sequential composition of program statements.
static exprt conditional_cast(const exprt &expr, const typet &type)
virtual void do_cpp_new(const exprt &lhs, const side_effect_exprt &rhs, goto_programt &dest)
code_expressiont & to_code_expression(codet &code)
codet representation of a switch-case, i.e. a case statement within a switch.
const code_function_callt & to_code_function_call(const goto_instruction_codet &code)
void set_break(goto_programt::targett _break_target)
static bool needs_cleaning(const exprt &expr)
Returns 'true' for expressions that may change the program state.
side_effect_expr_function_callt & to_side_effect_expr_function_call(exprt &expr)
void complete_goto(targett _target)
bool has_subexpr(const exprt &expr, const std::function< bool(const exprt &)> &pred)
returns true if the expression has a subexpression that satisfies pred
const goto_instruction_codet & code() const
Get the code represented by this instruction.
void generate_conditional_branch(const exprt &guard, goto_programt::targett target_true, goto_programt::targett target_false, const source_locationt &, goto_programt &dest, const irep_idt &mode)
if(guard) goto target_true; else goto target_false;
#define Forall_operands(it, expr)
void convert_msc_try_finally(const codet &code, goto_programt &dest, const irep_idt &mode)
const exprt & cond() const
codet representing a while statement.
static void replace_new_object(const exprt &object, exprt &dest)
void convert(const codet &code, goto_programt &dest, const irep_idt &mode)
converts 'code' and appends the result to 'dest'
const dereference_exprt & to_dereference_expr(const exprt &expr)
Cast an exprt to a dereference_exprt.
codet representation of a for statement.
void copy(const codet &code, goto_program_instruction_typet type, goto_programt &dest)
#define CHECK_RETURN(CONDITION)
The type of an expression, extends irept.
static instructiont make_set_return_value(exprt return_value, const source_locationt &l=source_locationt::nil())
const codet & then_case() const
std::string pretty(unsigned indent=0, unsigned max_indent=0) const
void convert_frontend_decl(const code_frontend_declt &, goto_programt &, const irep_idt &mode)
const exprt & upper() const
upper bound of range
void clean_expr(exprt &expr, goto_programt &dest, const irep_idt &mode, bool result_is_used=true)
const index_exprt & to_index_expr(const exprt &expr)
Cast an exprt to an index_exprt.
const if_exprt & to_if_expr(const exprt &expr)
Cast an exprt to an if_exprt.
const code_breakt & to_code_break(const codet &code)
void set_case_number(const irep_idt &number)
const irept & find(const irep_idt &name) const
void goto_convert_rec(const codet &code, goto_programt &dest, const irep_idt &mode)
typet type
Type of symbol.
Operator to dereference a pointer.
The trinary if-then-else operator.
void convert_skip(const codet &code, goto_programt &dest)
void convert_CPROVER_try_finally(const codet &code, goto_programt &dest, const irep_idt &mode)
void convert_assert(const code_assertt &code, goto_programt &dest, const irep_idt &mode)
static void finish_catch_push_targets(goto_programt &dest)
Populate the CATCH instructions with the targets corresponding to their associated labels.
static bool has_and_or(const exprt &expr)
if(guard) goto target;
std::string tmp_symbol_prefix
void convert_try_catch(const codet &code, goto_programt &dest, const irep_idt &mode)
void finish_gotos(goto_programt &dest, const irep_idt &mode)
A non-fatal assertion, which checks a condition then permits execution to continue.
const string_constantt & to_string_constant(const exprt &expr)
const exprt & assumption() const
targett add(instructiont &&instruction)
Adds a given instruction at the end.
void convert_ifthenelse(const code_ifthenelset &code, goto_programt &dest, const irep_idt &mode)
virtual void do_function_call(const exprt &lhs, const exprt &function, const exprt::operandst &arguments, goto_programt &dest, const irep_idt &mode)
void generate_ifthenelse(const exprt &cond, goto_programt &true_case, goto_programt &false_case, const source_locationt &, goto_programt &dest, const irep_idt &mode)
if(guard) true_case; else false_case;
A codet representing the declaration of a local variable.
void convert_assume(const code_assumet &code, goto_programt &dest, const irep_idt &mode)
bool empty() const
Is the program empty?
code_function_callt get_destructor(const namespacet &ns, const typet &type)
Base class for all expressions.
void convert_block(const code_blockt &code, goto_programt &dest, const irep_idt &mode)
const exprt & iter() const
Generic base class for unary expressions.
A base class for binary expressions.
codet representation of a continue statement (within a for or while loop).
const code_whilet & to_code_while(const codet &code)
codet representation of a switch-case, i.e. a case statement within a switch.
const exprt & cond() const
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
targetst targets
The list of successor instructions.
const code_frontend_declt & to_code_frontend_decl(const codet &code)
bool is_incomplete_goto() const
side_effect_exprt & to_side_effect_expr(exprt &expr)
Expression to hold a symbol (variable)
void generate_thread_block(const code_blockt &thread_body, goto_programt &dest, const irep_idt &mode)
Generates the necessary goto-instructions to represent a thread-block.
const code_fort & to_code_for(const codet &code)
void convert_switch_case(const code_switch_caset &code, goto_programt &dest, const irep_idt &mode)
codet representation of an if-then-else statement.
symbolt & new_tmp_symbol(const typet &type, const std::string &suffix, goto_programt &dest, const source_locationt &, const irep_idt &mode)
static instructiont make_goto(targett _target, const source_locationt &l=source_locationt::nil())
void goto_convert(const codet &code, goto_programt &dest, const irep_idt &mode)
bool is_false() const
Return whether the expression is a constant representing false.
Thrown when a goto program that's being processed is in an invalid format, for example passing the wr...
const exprt & lower() const
lower bound of range
const irep_idt & get(const irep_idt &name) const
const binary_exprt & to_binary_expr(const exprt &expr)
Cast an exprt to a binary_exprt.
#define INVARIANT_WITH_DIAGNOSTICS(CONDITION, REASON,...)
Same as invariant, with one or more diagnostics attached Diagnostics can be of any type that has a sp...
const exprt & return_value() const
void goto_convert(const codet &code, symbol_table_baset &symbol_table, goto_programt &dest, message_handlert &message_handler, const irep_idt &mode)
const code_switch_caset & to_code_switch_case(const codet &code)
code_operandst & statements()
const codet & to_code(const exprt &expr)
void convert_break(const code_breakt &code, goto_programt &dest, const irep_idt &mode)
typet & type()
Return the type of the expression.
const code_assumet & to_code_assume(const codet &code)
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
const code_assertt & to_code_assert(const codet &code)
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.
exprt disjunction(const exprt::operandst &op)
1) generates a disjunction for two or more operands 2) for one operand, returns the operand 3) return...
const exprt & assertion() const
codet representation of a do while statement.
void restore(targetst &targets)
struct goto_convertt::targetst targets
void convert_expression(const code_expressiont &code, goto_programt &dest, const irep_idt &mode)
static instructiont make_assertion(const exprt &g, const source_locationt &l=source_locationt::nil())
irep_idt mode
Language mode.
void add(const codet &destructor)
Adds a destructor to the current stack, attaching itself to the current node.
mstreamt & result() const
const exprt & init() const
bool has_prefix(const std::string &s, const std::string &prefix)
void convert_continue(const code_continuet &code, goto_programt &dest, const irep_idt &mode)
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
void destructive_insert(const_targett target, goto_programt &p)
Inserts the given program p before target.
void unwind_destructor_stack(const source_locationt &source_location, goto_programt &dest, const irep_idt &mode, optionalt< node_indext > destructor_start_point={}, optionalt< node_indext > destructor_end_point={})
Unwinds the destructor stack and creates destructors for each node between destructor_start_point and...
void convert_CPROVER_try_catch(const codet &code, goto_programt &dest, const irep_idt &mode)
codet representation of a break statement (within a for or while loop).
const std::string & id2string(const irep_idt &d)
const source_locationt & source_location() const
std::size_t right_depth_below_common_ancestor
codet & code()
the statement to be executed when the case applies
source_locationt source_location
irep_idt get_string_constant(const exprt &expr)
node_indext break_stack_node
const code_gotot & to_code_goto(const codet &code)
#define forall_operands(it, expr)
static instructiont make_skip(const source_locationt &l=source_locationt::nil())
void set(const irep_idt &name, const irep_idt &value)
codet representation of a goto statement.
goto_programt::targett break_target
const code_ifthenelset & to_code_ifthenelse(const codet &code)
codet representation of a label for branch targets.
#define PRECONDITION(CONDITION)
void convert_CPROVER_throw(const codet &code, goto_programt &dest, const irep_idt &mode)
const source_locationt & find_source_location() const
Get a source_locationt from the expression or from its operands (non-recursively).
void optimize_guarded_gotos(goto_programt &dest)
Rewrite "if(x) goto z; goto y; z:" into "if(!x) goto y;" This only works if the "goto y" is not a bra...
The symbol table base class interface.
exprt boolean_negate(const exprt &src)
negate a Boolean expression, possibly removing a not_exprt, and swapping false and true
An assumption, which must hold in subsequent code.
const code_labelt & to_code_label(const codet &code)
class symbol_exprt symbol_expr() const
Produces a symbol_exprt for a symbol.
node_indext common_ancestor
bool simplify(exprt &expr, const namespacet &ns)
const code_dowhilet & to_code_dowhile(const codet &code)
void convert_goto(const code_gotot &code, goto_programt &dest)
exception_listt & exception_list()
pointer_typet pointer_type(const typet &subtype)
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const exprt & cond() const
const codet & body() const
void convert_return(const code_frontend_returnt &, goto_programt &dest, const irep_idt &mode)
const irep_idt & id() const
static bool is_size_one(const goto_programt &g)
This is (believed to be) faster than using std::list.size.
void restore(targetst &targets)
std::vector< exprt > operandst
void add(const codet &code)
void convert_for(const code_fort &code, goto_programt &dest, const irep_idt &mode)
exprt get_constant(const exprt &expr)
A goto_instruction_codet representing the removal of a local variable going out of scope.
const parameterst & parameters() const
static bool is_empty(const goto_programt &goto_program)
void convert_while(const code_whilet &code, goto_programt &dest, const irep_idt &mode)
void convert_assign(const code_assignt &code, goto_programt &dest, const irep_idt &mode)
goto_programt::targett default_target
void destructive_append(goto_programt &p)
Appends the given program p to *this. p is destroyed.
static void collect_operands(const exprt &expr, const irep_idt &id, std::list< exprt > &dest)
goto_program_instruction_typet
The type of an instruction in a GOTO program.
codet representation of a "return from a function" statement.
const code_gcc_switch_case_ranget & to_code_gcc_switch_case_range(const codet &code)
const irep_idt & get_label() const
code_asmt & to_code_asm(codet &code)
instructionst instructions
The list of instructions in the goto program.
Deprecated expression utility functions.
const exprt & value() const
void convert_asm(const code_asmt &code, goto_programt &dest)
void finish_computed_gotos(goto_programt &dest)
exprt value
Initial value of symbol.
void set_current_node(optionalt< node_indext > val)
Sets the current node.
const code_frontend_returnt & to_code_frontend_return(const codet &code)
void convert_msc_leave(const codet &code, goto_programt &dest, const irep_idt &mode)
destructor_treet destructor_stack
const not_exprt & to_not_expr(const exprt &expr)
Cast an exprt to an not_exprt.
exprt case_guard(const exprt &value, const caset &case_op)
void convert_gcc_local_label(const codet &code, goto_programt &dest)
std::vector< exception_list_entryt > exception_listt
codet representing a switch statement.
void convert_start_thread(const codet &code, goto_programt &dest)
const codet & body() const
static symbol_table_buildert wrap(symbol_table_baset &base_symbol_table)
const typecast_exprt & to_typecast_expr(const exprt &expr)
Cast an exprt to a typecast_exprt.
void convert_msc_try_except(const codet &code, goto_programt &dest, const irep_idt &mode)
const symbolst & symbols
Read-only field, used to look up symbols given their names.
const codet & body() const
A base class for relations, i.e., binary predicates whose two operands have the same type.
const codet & else_case() const
const code_switcht & to_code_switch(const codet &code)
node_indext get_current_node() const
Gets the node that the next addition will be added to as a child.
void set_continue(goto_programt::targett _continue_target)
A generic container class for the GOTO intermediate representation of one function.
bool has_return_value() const
const exprt & cond() const
targett insert_after(const_targett target)
Insertion after the instruction pointed-to by the given instruction iterator target.
symbol_table_baset & symbol_table
const code_blockt & to_code_block(const codet &code)
const member_exprt & to_member_expr(const exprt &expr)
Cast an exprt to a member_exprt.
void convert_cpp_delete(const codet &code, goto_programt &dest)
const irept & get_nil_irep()
void convert_loop_contracts(const codet &code, goto_programt::targett loop, const irep_idt &mode)
const exprt & expression() const
static instructiont make_assumption(const exprt &g, const source_locationt &l=source_locationt::nil())
const address_of_exprt & to_address_of_expr(const exprt &expr)
Cast an exprt to an address_of_exprt.
void convert_atomic_end(const codet &code, goto_programt &dest)
goto_programt::targett continue_target
Operator to return the address of an object.
source_locationt & add_source_location()
const codet & body() const
Semantic type conversion.
bool is_skip(const goto_programt &body, goto_programt::const_targett it, bool ignore_labels)
Determine whether the instruction is semantically equivalent to a skip (no-op).
A goto_instruction_codet representing an assignment in the program.
void convert_label(const code_labelt &code, goto_programt &dest, const irep_idt &mode)
bool is_start_thread() const
The Boolean constant true.
const irep_idt & get_statement() const
void convert_gcc_switch_case_range(const code_gcc_switch_case_ranget &, goto_programt &dest, const irep_idt &mode)
mstreamt & warning() const
const ancestry_resultt get_nearest_common_ancestor_info(node_indext left_index, node_indext right_index)
Finds the nearest common ancestor of two nodes and then returns it.
This class represents an instruction in the GOTO intermediate representation.
const source_locationt & source_location() const
void set_default(goto_programt::targett _default_target)
node_indext continue_stack_node
static const unsigned nil_target
Uniquely identify an invalid target or location.
symbolt & get_fresh_aux_symbol(const typet &type, const std::string &name_prefix, const std::string &basename_prefix, const source_locationt &source_location, const irep_idt &symbol_mode, const namespacet &ns, symbol_table_baset &symbol_table)
Installs a fresh-named symbol with respect to the given namespace ns with the requested name pattern ...
static instructiont make_location(const source_locationt &l)
irep_idt name
The unique identifier.
const code_continuet & to_code_continue(const codet &code)
const irep_idt & get_value() const
void swap(goto_programt &program)
Swap the goto program.
instructionst::iterator targett
#define forall_goto_program_instructions(it, program)
void convert_atomic_begin(const codet &code, goto_programt &dest)
void convert_decl_type(const codet &code, goto_programt &dest)
source_locationt end_location() const
static instructiont make_incomplete_goto(const exprt &_cond, const source_locationt &l=source_locationt::nil())
const code_assignt & to_code_assign(const goto_instruction_codet &code)
computed_gotost computed_gotos
codet representation of an expression statement.
void convert_switch(const code_switcht &code, goto_programt &dest, const irep_idt &mode)
static code_push_catcht & to_code_push_catch(codet &code)
Result of an attempt to find ancestor information about two nodes.
Data structure for representing an arbitrary statement in a program.
goto_programt::targett return_target
void make_temp_symbol(exprt &expr, const std::string &suffix, goto_programt &, const irep_idt &mode)
void convert_end_thread(const codet &code, goto_programt &dest)
void convert_gcc_computed_goto(const codet &code, goto_programt &dest)