goto_programt::targett add_return_assignment(goto_programt &body, goto_programt::targett pos, const irep_idt &func_id, const exprt &value) { const source_locationt &loc=pos->source_location; pos=body.insert_after(pos); pos->make_assignment(); pos->source_location=loc; pos->code=code_assignt(get_ret_val_var(func_id, value.type()), value); return pos; }
void remove_return(goto_programt &body, const goto_programt::targett pos) { code_function_callt &call=to_code_function_call(pos->code); const irep_idt &id=to_symbol_expr(call.function()).get_identifier(); const typet &type=call.lhs().type(); const source_locationt &loc=pos->source_location; const irep_idt &func=pos->function; const goto_programt::targett assign=body.insert_after(pos); assign->make_assignment(); assign->source_location=loc; assign->code=code_assignt(call.lhs(), get_ret_val_var(id, type)); assign->function=func; call.lhs().make_nil(); }