File tree Expand file tree Collapse file tree 1 file changed +15
-3
lines changed Expand file tree Collapse file tree 1 file changed +15
-3
lines changed Original file line number Diff line number Diff line change @@ -836,9 +836,21 @@ void smv_typecheckt::typecheck_expr_rec(
836836 auto &false_case = if_expr.false_case ();
837837 typecheck_expr_rec (if_expr.cond (), mode);
838838 convert_expr_to (if_expr.cond (), bool_typet{});
839- typecheck_expr_rec (true_case, dest_type, mode);
840- typecheck_expr_rec (false_case, dest_type, mode);
841- expr.type () = dest_type;
839+
840+ if (dest_type.is_nil ())
841+ {
842+ typecheck_expr_rec (true_case, mode);
843+ typecheck_expr_rec (false_case, mode);
844+ expr.type () = type_union (true_case.type (), false_case.type ());
845+ typecheck_expr_rec (true_case, expr.type (), mode);
846+ typecheck_expr_rec (false_case, expr.type (), mode);
847+ }
848+ else
849+ {
850+ typecheck_expr_rec (true_case, dest_type, mode);
851+ typecheck_expr_rec (false_case, dest_type, mode);
852+ expr.type () = dest_type;
853+ }
842854 }
843855 else if (expr.id ()==ID_plus || expr.id ()==ID_minus ||
844856 expr.id ()==ID_mult || expr.id ()==ID_div ||
You can’t perform that action at this time.
0 commit comments