Skip to content

Commit 91b93bc

Browse files
committed
less strict kind test for pointer operations
1 parent 684de68 commit 91b93bc

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/operator.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,15 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
268268
use rustc::mir::BinOp::*;
269269
use value::PrimValKind::*;
270270

271-
if left_kind != right_kind {
271+
if left_kind != right_kind || !(left_kind.is_ptr() || left_kind == PrimValKind::from_uint_size(self.memory.pointer_size())) {
272272
let msg = format!("unimplemented binary op {:?}: {:?} ({:?}), {:?} ({:?})", bin_op, left, left_kind, right, right_kind);
273273
return Err(EvalError::Unimplemented(msg));
274274
}
275275

276-
let val = match (bin_op, left_kind) {
277-
(Eq, k) if k.is_ptr() => PrimVal::from_bool(left == right),
278-
(Ne, k) if k.is_ptr() => PrimVal::from_bool(left != right),
279-
(Lt, k) | (Le, k) | (Gt, k) | (Ge, k) if k.is_ptr() => {
276+
let val = match bin_op {
277+
Eq => PrimVal::from_bool(left == right),
278+
Ne => PrimVal::from_bool(left != right),
279+
Lt | Le | Gt | Ge => {
280280
if left.alloc_id == right.alloc_id {
281281
PrimVal::from_bool(match bin_op {
282282
Lt => left.offset < right.offset,
@@ -289,9 +289,9 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
289289
return Err(EvalError::InvalidPointerMath);
290290
}
291291
}
292-
(Sub, k) if k == PrimValKind::from_uint_size(self.memory.pointer_size()) => {
292+
Sub => {
293293
if left.alloc_id == right.alloc_id {
294-
return int_arithmetic!(k, overflowing_sub, left.offset, right.offset);
294+
return int_arithmetic!(left_kind, overflowing_sub, left.offset, right.offset);
295295
} else {
296296
return Err(EvalError::InvalidPointerMath);
297297
}

0 commit comments

Comments
 (0)