30 if(!ignore_labels && !it->labels.empty())
34 return !it->code.get_bool(ID_explicit);
38 if(it->get_condition().is_false())
49 return it->get_condition().is_true() && it->get_target() == next_it;
54 if(it->get_other().is_nil())
57 const irep_idt &statement = it->get_other().get_statement();
59 if(statement==ID_skip)
61 else if(statement==ID_expression)
65 if(expr.
id()==ID_typecast &&
66 expr.
type().
id()==ID_empty &&
99 typedef std::map<goto_programt::targett, goto_programt::targett>
101 new_targetst new_targets;
105 for(goto_programt::instructionst::iterator it = begin; it != end;)
110 std::list<irep_idt> labels;
112 while(
is_skip(goto_program, it,
true))
117 it == std::prev(end) ||
118 (std::next(it)->is_end_function() &&
119 (!labels.empty() || !it->labels.empty())))
125 labels.splice(labels.end(), it->labels);
132 it->labels.splice(it->labels.begin(), labels);
134 if(new_target!=old_target)
136 for(; old_target!=new_target; ++old_target)
137 new_targets[old_target]=new_target;
146 if(ins.is_goto() || ins.is_start_thread() || ins.is_catch())
148 for(
auto &target : ins.targets)
150 new_targetst::const_iterator result = new_targets.find(target);
152 if(result!=new_targets.end())
153 target = result->second;
158 while(new_targets.find(begin) != new_targets.end())
163 for(
const auto &new_target : new_targets)
175 if(
is_skip(goto_program, last) && !last->is_target())
199 f_it->second.body.instructions.begin(),
200 f_it->second.body.instructions.end());