File tree Expand file tree Collapse file tree 1 file changed +17
-16
lines changed Expand file tree Collapse file tree 1 file changed +17
-16
lines changed Original file line number Diff line number Diff line change @@ -1153,27 +1153,28 @@ exprt goto_convertt::case_guard(
1153
1153
const exprt &value,
1154
1154
const exprt::operandst &case_op)
1155
1155
{
1156
- exprt dest=exprt (ID_or, bool_typet ());
1157
- dest.reserve_operands (case_op.size ());
1156
+ PRECONDITION (!case_op.empty ());
1158
1157
1159
- forall_expr (it, case_op)
1158
+ if (case_op.size () == 1 )
1159
+ return equal_exprt (value, case_op.at (0 ));
1160
+ else
1160
1161
{
1161
- equal_exprt eq_expr;
1162
- eq_expr.lhs ()=value;
1163
- eq_expr.rhs ()=*it;
1164
- dest.move_to_operands (eq_expr);
1165
- }
1162
+ exprt dest = exprt (ID_or, bool_typet ());
1163
+ dest.reserve_operands (case_op.size ());
1166
1164
1167
- CHECK_RETURN (!dest.operands ().empty ());
1165
+ forall_expr (it, case_op)
1166
+ {
1167
+ equal_exprt eq_expr;
1168
+ eq_expr.lhs () = value;
1169
+ eq_expr.rhs () = *it;
1170
+ dest.move_to_operands (eq_expr);
1171
+ }
1172
+ INVARIANT (
1173
+ case_op.size () == dest.operands ().size (),
1174
+ " case guard conversion should preserve the number of cases" );
1168
1175
1169
- if (dest.operands ().size ()==1 )
1170
- {
1171
- exprt tmp;
1172
- tmp.swap (dest.op0 ());
1173
- dest.swap (tmp);
1176
+ return dest;
1174
1177
}
1175
-
1176
- return dest;
1177
1178
}
1178
1179
1179
1180
void goto_convertt::convert_switch (
You can’t perform that action at this time.
0 commit comments