File tree 1 file changed +15
-3
lines changed
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(
836
836
auto &false_case = if_expr.false_case ();
837
837
typecheck_expr_rec (if_expr.cond (), mode);
838
838
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
+ }
842
854
}
843
855
else if (expr.id ()==ID_plus || expr.id ()==ID_minus ||
844
856
expr.id ()==ID_mult || expr.id ()==ID_div ||
You can’t perform that action at this time.
0 commit comments