@@ -631,6 +631,12 @@ Function: smv_typecheckt::typecheck_expr_rec
631
631
632
632
void smv_typecheckt::typecheck_expr_rec (exprt &expr, modet mode)
633
633
{
634
+ // Do the operands
635
+ for (auto &op : expr.operands ())
636
+ typecheck_expr_rec (op, mode);
637
+
638
+ // now post-traversal
639
+
634
640
if (expr.id ()==ID_symbol ||
635
641
expr.id ()==ID_next_symbol)
636
642
{
@@ -668,9 +674,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
668
674
{
669
675
PRECONDITION (!expr.operands ().empty ());
670
676
671
- for (auto &op : expr.operands ())
672
- typecheck_expr_rec (op, mode);
673
-
674
677
auto &op0_type = to_multi_ary_expr (expr).op0 ().type ();
675
678
676
679
// boolean or bit-wise?
@@ -708,9 +711,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
708
711
else if (expr.id () == ID_smv_iff)
709
712
{
710
713
auto &binary_expr = to_binary_expr (expr);
711
- typecheck_expr_rec (binary_expr.lhs (), mode);
712
- typecheck_expr_rec (binary_expr.rhs (), mode);
713
-
714
714
auto &op0_type = binary_expr.op0 ().type ();
715
715
716
716
if (op0_type.id () == ID_signedbv || op0_type.id () == ID_unsignedbv)
@@ -731,9 +731,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
731
731
}
732
732
else if (expr.id ()==ID_constraint_select_one)
733
733
{
734
- for (auto &op : expr.operands ())
735
- typecheck_expr_rec (op, mode);
736
-
737
734
typet op_type;
738
735
op_type.make_nil ();
739
736
@@ -757,9 +754,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
757
754
exprt &op0 = to_binary_expr (expr).op0 ();
758
755
exprt &op1 = to_binary_expr (expr).op1 ();
759
756
760
- typecheck_expr_rec (op0, mode);
761
- typecheck_expr_rec (op1, mode);
762
-
763
757
typet op_type = type_union (op0.type (), op1.type (), expr.source_location ());
764
758
765
759
convert_expr_to (op0, op_type);
@@ -784,10 +778,7 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
784
778
auto &if_expr = to_if_expr (expr);
785
779
auto &true_case = if_expr.true_case ();
786
780
auto &false_case = if_expr.false_case ();
787
- typecheck_expr_rec (if_expr.cond (), mode);
788
781
convert_expr_to (if_expr.cond (), bool_typet{});
789
- typecheck_expr_rec (true_case, mode);
790
- typecheck_expr_rec (false_case, mode);
791
782
expr.type () =
792
783
type_union (true_case.type (), false_case.type (), expr.source_location ());
793
784
convert_expr_to (true_case, expr.type ());
@@ -800,9 +791,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
800
791
auto &op0 = to_binary_expr (expr).op0 ();
801
792
auto &op1 = to_binary_expr (expr).op1 ();
802
793
803
- typecheck_expr_rec (op0, mode);
804
- typecheck_expr_rec (op1, mode);
805
-
806
794
if (op0.type ().id () == ID_range || op0.type ().id () == ID_bool)
807
795
{
808
796
// find proper type for precise arithmetic
@@ -873,9 +861,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
873
861
else if (expr.id ()==ID_cond)
874
862
{
875
863
// case ... esac
876
- for (auto &op : expr.operands ())
877
- typecheck_expr_rec (op, mode);
878
-
879
864
bool condition = true ;
880
865
881
866
expr.type ().make_nil ();
@@ -911,7 +896,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
911
896
<< " CTL operator not permitted here" ;
912
897
expr.type () = bool_typet ();
913
898
auto &op = to_unary_expr (expr).op ();
914
- typecheck_expr_rec (op, mode);
915
899
convert_expr_to (op, expr.type ());
916
900
}
917
901
else if (
@@ -923,7 +907,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
923
907
<< " CTL operator not permitted here" ;
924
908
expr.type () = bool_typet ();
925
909
auto &op2 = to_ternary_expr (expr).op2 ();
926
- typecheck_expr_rec (op2, mode);
927
910
convert_expr_to (op2, expr.type ());
928
911
}
929
912
else if (expr.id () == ID_smv_ABU || expr.id () == ID_smv_EBU)
@@ -934,7 +917,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
934
917
expr.type () = bool_typet ();
935
918
for (std::size_t i = 0 ; i < expr.operands ().size (); i++)
936
919
{
937
- typecheck_expr_rec (expr.operands ()[i], mode);
938
920
if (i == 0 || i == 3 )
939
921
convert_expr_to (expr.operands ()[i], expr.type ());
940
922
}
@@ -949,7 +931,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
949
931
<< " LTL operator not permitted here" ;
950
932
expr.type () = bool_typet{};
951
933
auto &op = to_unary_expr (expr).op ();
952
- typecheck_expr_rec (op, mode);
953
934
convert_expr_to (op, expr.type ());
954
935
}
955
936
else if (
@@ -961,8 +942,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
961
942
<< " CTL operator not permitted here" ;
962
943
auto &binary_expr = to_binary_expr (expr);
963
944
expr.type () = bool_typet{};
964
- typecheck_expr_rec (binary_expr.lhs (), mode);
965
- typecheck_expr_rec (binary_expr.rhs (), mode);
966
945
convert_expr_to (binary_expr.lhs (), expr.type ());
967
946
convert_expr_to (binary_expr.rhs (), expr.type ());
968
947
}
@@ -975,8 +954,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
975
954
<< " LTL operator not permitted here" ;
976
955
auto &binary_expr = to_binary_expr (expr);
977
956
expr.type () = bool_typet{};
978
- typecheck_expr_rec (binary_expr.lhs (), mode);
979
- typecheck_expr_rec (binary_expr.rhs (), mode);
980
957
convert_expr_to (binary_expr.lhs (), expr.type ());
981
958
convert_expr_to (binary_expr.rhs (), expr.type ());
982
959
}
@@ -996,7 +973,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
996
973
else if (expr.id () == ID_unary_minus)
997
974
{
998
975
auto &uminus_expr = to_unary_minus_expr (expr);
999
- typecheck_expr_rec (uminus_expr.op (), mode);
1000
976
auto &op_type = uminus_expr.op ().type ();
1001
977
1002
978
if (op_type.id () == ID_range)
@@ -1024,8 +1000,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1024
1000
else if (expr.id () == ID_smv_swconst)
1025
1001
{
1026
1002
auto &binary_expr = to_binary_expr (expr);
1027
- typecheck_expr_rec (binary_expr.lhs (), mode);
1028
- typecheck_expr_rec (binary_expr.rhs (), mode);
1029
1003
PRECONDITION (binary_expr.lhs ().is_constant ());
1030
1004
PRECONDITION (binary_expr.rhs ().is_constant ());
1031
1005
auto bits = numeric_cast_v<mp_integer>(to_constant_expr (binary_expr.rhs ()));
@@ -1038,8 +1012,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1038
1012
else if (expr.id () == ID_smv_uwconst)
1039
1013
{
1040
1014
auto &binary_expr = to_binary_expr (expr);
1041
- typecheck_expr_rec (binary_expr.lhs (), mode);
1042
- typecheck_expr_rec (binary_expr.rhs (), mode);
1043
1015
PRECONDITION (binary_expr.lhs ().is_constant ());
1044
1016
PRECONDITION (binary_expr.rhs ().is_constant ());
1045
1017
auto bits = numeric_cast_v<mp_integer>(to_constant_expr (binary_expr.rhs ()));
@@ -1056,8 +1028,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1056
1028
auto &binary_expr = to_binary_expr (expr);
1057
1029
1058
1030
// The LHS must be a word type.
1059
- typecheck_expr_rec (binary_expr.lhs (), mode);
1060
-
1061
1031
binary_expr.type () = binary_expr.lhs ().type ();
1062
1032
1063
1033
if (binary_expr.type ().id () == ID_signedbv)
@@ -1077,8 +1047,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1077
1047
}
1078
1048
1079
1049
// The RHS must be an integer constant
1080
- typecheck_expr_rec (binary_expr.rhs (), mode);
1081
-
1082
1050
if (
1083
1051
binary_expr.rhs ().type ().id () != ID_range &&
1084
1052
binary_expr.rhs ().type ().id () != ID_natural)
@@ -1112,9 +1080,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1112
1080
{
1113
1081
auto &binary_expr = to_binary_expr (expr);
1114
1082
1115
- typecheck_expr_rec (binary_expr.lhs (), mode);
1116
- typecheck_expr_rec (binary_expr.rhs (), mode);
1117
-
1118
1083
if (
1119
1084
binary_expr.lhs ().type ().id () != ID_signedbv &&
1120
1085
binary_expr.lhs ().type ().id () != ID_unsignedbv)
@@ -1139,7 +1104,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1139
1104
else if (expr.id () == ID_smv_sizeof)
1140
1105
{
1141
1106
auto &op = to_unary_expr (expr).op ();
1142
- typecheck_expr_rec (op, mode);
1143
1107
if (op.type ().id () == ID_signedbv || op.type ().id () == ID_unsignedbv)
1144
1108
{
1145
1109
auto bits = to_bitvector_type (op.type ()).get_width ();
@@ -1154,8 +1118,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1154
1118
else if (expr.id () == ID_smv_resize)
1155
1119
{
1156
1120
auto &binary_expr = to_binary_expr (expr);
1157
- typecheck_expr_rec (binary_expr.lhs (), mode);
1158
- typecheck_expr_rec (binary_expr.rhs (), mode);
1159
1121
PRECONDITION (binary_expr.rhs ().is_constant ());
1160
1122
auto &lhs_type = binary_expr.lhs ().type ();
1161
1123
auto new_bits =
@@ -1174,8 +1136,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1174
1136
else if (expr.id () == ID_smv_extend)
1175
1137
{
1176
1138
auto &binary_expr = to_binary_expr (expr);
1177
- typecheck_expr_rec (binary_expr.lhs (), mode);
1178
- typecheck_expr_rec (binary_expr.rhs (), mode);
1179
1139
PRECONDITION (binary_expr.rhs ().is_constant ());
1180
1140
auto &lhs_type = binary_expr.lhs ().type ();
1181
1141
auto old_bits = to_bitvector_type (lhs_type).get_width ();
@@ -1196,7 +1156,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1196
1156
{
1197
1157
// a reinterpret cast
1198
1158
auto &op = to_unary_expr (expr).op ();
1199
- typecheck_expr_rec (op, mode);
1200
1159
if (op.type ().id () == ID_signedbv)
1201
1160
expr.type () = unsignedbv_typet{to_signedbv_type (op.type ()).get_width ()};
1202
1161
else
@@ -1209,7 +1168,6 @@ void smv_typecheckt::typecheck_expr_rec(exprt &expr, modet mode)
1209
1168
{
1210
1169
// a reinterpret cast
1211
1170
auto &op = to_unary_expr (expr).op ();
1212
- typecheck_expr_rec (op, mode);
1213
1171
if (op.type ().id () == ID_unsignedbv)
1214
1172
expr.type () = signedbv_typet{to_unsignedbv_type (op.type ()).get_width ()};
1215
1173
else
0 commit comments