Adapt interpreter.

This commit is contained in:
Camille GILLOT 2023-02-11 16:41:37 +00:00
parent 1480b1c524
commit 7567f1f31d
2 changed files with 13 additions and 11 deletions

View file

@ -569,16 +569,12 @@ fn codegen_assert_terminator(
// checked operation, just a comparison with the minimum
// value, so we have to check for the assert message.
if !bx.cx().check_overflow() {
if let AssertKind::OverflowNeg(_)
| AssertKind::Overflow(
mir::BinOp::Add
| mir::BinOp::Sub
| mir::BinOp::Mul
| mir::BinOp::Shl
| mir::BinOp::Shr,
..,
) = *msg
{
let unchecked_overflow = match msg {
AssertKind::OverflowNeg(..) => true,
AssertKind::Overflow(op, ..) => op.is_checkable(),
_ => false,
};
if unchecked_overflow {
const_cond = Some(expected);
}
}

View file

@ -137,8 +137,14 @@ pub(super) fn eval_terminator(
}
Assert { ref cond, expected, ref msg, target, cleanup } => {
let ignored = !self.tcx.sess.overflow_checks()
&& match msg {
mir::AssertKind::OverflowNeg(..) => true,
mir::AssertKind::Overflow(op, ..) => op.is_checkable(),
_ => false,
};
let cond_val = self.read_scalar(&self.eval_operand(cond, None)?)?.to_bool()?;
if expected == cond_val {
if ignored || expected == cond_val {
self.go_to_block(target);
} else {
M::assert_panic(self, msg, cleanup)?;