Skip to content

Commit 62f99fb

Browse files
committed
SMV: typechecking for ?:
This fixes type checking for SMV ?:
1 parent f22a2c1 commit 62f99fb

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/smvlang/smv_typecheck.cpp

+15-3
Original file line numberDiff line numberDiff 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 ||

0 commit comments

Comments
 (0)