@@ -49,6 +49,7 @@ void goto_convertt::remove_assignment(
4949 if (statement==ID_assign)
5050 {
5151 auto &old_assignment = to_side_effect_expr_assign (expr);
52+ exprt new_lhs = skip_typecast (old_assignment.lhs ());
5253
5354 if (
5455 result_is_used && !address_taken &&
@@ -57,10 +58,10 @@ void goto_convertt::remove_assignment(
5758 if (!old_assignment.rhs ().is_constant ())
5859 make_temp_symbol (old_assignment.rhs (), " assign" , dest, mode);
5960
60- replacement_expr_opt = old_assignment.rhs ();
61+ replacement_expr_opt =
62+ typecast_exprt::conditional_cast (old_assignment.rhs (), new_lhs.type ());
6163 }
6264
63- exprt new_lhs = skip_typecast (old_assignment.lhs ());
6465 exprt new_rhs =
6566 typecast_exprt::conditional_cast (old_assignment.rhs (), new_lhs.type ());
6667 code_assignt new_assignment (std::move (new_lhs), std::move (new_rhs));
@@ -115,6 +116,7 @@ void goto_convertt::remove_assignment(
115116 }
116117
117118 const binary_exprt &binary_expr = to_binary_expr (expr);
119+ exprt new_lhs = skip_typecast (binary_expr.op0 ());
118120 const typet &op0_type = binary_expr.op0 ().type ();
119121
120122 PRECONDITION (
@@ -129,10 +131,10 @@ void goto_convertt::remove_assignment(
129131 assignment_lhs_needs_temporary (binary_expr.op0 ()))
130132 {
131133 make_temp_symbol (rhs, " assign" , dest, mode);
132- replacement_expr_opt = rhs;
134+ replacement_expr_opt =
135+ typecast_exprt::conditional_cast (rhs, new_lhs.type ());
133136 }
134137
135- exprt new_lhs = skip_typecast (binary_expr.op0 ());
136138 rhs = typecast_exprt::conditional_cast (rhs, new_lhs.type ());
137139 rhs.add_source_location () = expr.source_location ();
138140 code_assignt assignment (new_lhs, rhs);
0 commit comments