@@ -82,13 +82,18 @@ static void remove_vector(exprt &expr)
82
82
expr.id ()==ID_mod || expr.id ()==ID_bitxor ||
83
83
expr.id ()==ID_bitand || expr.id ()==ID_bitor)
84
84
{
85
+ // FIXME plus, mult, bitxor, bitand and bitor are defined as n-ary
86
+ // operations rather than binary. This code assumes that they
87
+ // can only have exactly 2 operands, and it is not clear
88
+ // that it is safe to do so in this context
89
+ PRECONDITION (expr.operands ().size () == 2 );
90
+ auto const &binary_expr = to_binary_expr (expr);
85
91
remove_vector (expr.type ());
86
92
array_typet array_type=to_array_type (expr.type ());
87
93
88
94
mp_integer dimension;
89
95
to_integer (array_type.size (), dimension);
90
96
91
- assert (expr.operands ().size ()==2 );
92
97
const typet subtype=array_type.subtype ();
93
98
// do component-wise:
94
99
// x+y -> vector(x[0]+y[0],x[1]+y[1],...)
@@ -99,22 +104,23 @@ static void remove_vector(exprt &expr)
99
104
{
100
105
exprt index=from_integer (i, array_type.size ().type ());
101
106
102
- array_expr.operands ()[i]=
103
- binary_exprt (index_exprt (expr.op0 (), index, subtype), expr.id (),
104
- index_exprt (expr.op1 (), index, subtype));
107
+ array_expr.operands ()[i] = binary_exprt (
108
+ index_exprt (binary_expr.op0 (), index, subtype),
109
+ binary_expr.id (),
110
+ index_exprt (binary_expr.op1 (), index, subtype));
105
111
}
106
112
107
113
expr=array_expr;
108
114
}
109
115
else if (expr.id ()==ID_unary_minus || expr.id ()==ID_bitnot)
110
116
{
117
+ auto const &unary_expr = to_unary_expr (expr);
111
118
remove_vector (expr.type ());
112
119
array_typet array_type=to_array_type (expr.type ());
113
120
114
121
mp_integer dimension;
115
122
to_integer (array_type.size (), dimension);
116
123
117
- assert (expr.operands ().size ()==1 );
118
124
const typet subtype=array_type.subtype ();
119
125
// do component-wise:
120
126
// -x -> vector(-x[0],-x[1],...)
@@ -125,8 +131,8 @@ static void remove_vector(exprt &expr)
125
131
{
126
132
exprt index=from_integer (i, array_type.size ().type ());
127
133
128
- array_expr.operands ()[i]=
129
- unary_exprt (expr .id (), index_exprt (expr .op0 (), index, subtype));
134
+ array_expr.operands ()[i] = unary_exprt (
135
+ unary_expr .id (), index_exprt (unary_expr .op0 (), index, subtype));
130
136
}
131
137
132
138
expr=array_expr;
0 commit comments