Skip to content

Commit

Permalink
[const-prop] Replace CheckedBinaryOp handling with use of InterpCx
Browse files Browse the repository at this point in the history
  • Loading branch information
wesleywiser committed Sep 28, 2019
1 parent 644d4f3 commit 11eb91f
Show file tree
Hide file tree
Showing 9 changed files with 18 additions and 18 deletions.
28 changes: 10 additions & 18 deletions src/librustc_mir/transform/const_prop.rs
Expand Up @@ -312,7 +312,8 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
Rvalue::Use(_) |
Rvalue::Len(_) |
Rvalue::Cast(..) |
Rvalue::NullaryOp(..) => {
Rvalue::NullaryOp(..) |
Rvalue::CheckedBinaryOp(..) => {
self.use_ecx(source_info, |this| {
this.ecx.eval_rvalue_into_place(rvalue, place)?;
this.ecx.eval_place_to_op(place, Some(place_layout))
Expand Down Expand Up @@ -348,7 +349,6 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
this.ecx.eval_place_to_op(place, Some(place_layout))
})
}
Rvalue::CheckedBinaryOp(op, ref left, ref right) |
Rvalue::BinaryOp(op, ref left, ref right) => {
trace!("rvalue binop {:?} for {:?} and {:?}", op, left, right);
let right = self.eval_operand(right, source_info)?;
Expand Down Expand Up @@ -403,23 +403,15 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
let (val, overflow, _ty) = self.use_ecx(source_info, |this| {
this.ecx.overflowing_binary_op(op, l, r)
})?;
let val = if let Rvalue::CheckedBinaryOp(..) = *rvalue {
Immediate::ScalarPair(
val.into(),
Scalar::from_bool(overflow).into(),
)
} else {
// We check overflow in debug mode already
// so should only check in release mode.
if !self.tcx.sess.overflow_checks() && overflow {
let err = err_panic!(Overflow(op)).into();
let _: Option<()> = self.use_ecx(source_info, |_| Err(err));
return None;
}
Immediate::Scalar(val.into())
};
// We check overflow in debug mode already
// so should only check in release mode.
if !self.tcx.sess.overflow_checks() && overflow {
let err = err_panic!(Overflow(op)).into();
let _: Option<()> = self.use_ecx(source_info, |_| Err(err));
return None;
}
let res = ImmTy {
imm: val,
imm: Immediate::Scalar(val.into()),
layout: place_layout,
};
Some(res.into())
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-lsh-1.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = 1_i32 << 32;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-lsh-2.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = 1 << -1;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-lsh-3.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = 1_u64 << 64;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-lsh-4.rs
Expand Up @@ -5,6 +5,7 @@
// sidestep the overflow checking.

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
// this signals overflow when checking is on
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-rsh-1.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = -1_i32 >> 32;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-rsh-2.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = -1_i32 >> -1;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-rsh-3.rs
Expand Up @@ -2,6 +2,7 @@
// compile-flags: -C debug-assertions

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
let _x = -1_i64 >> 64;
Expand Down
1 change: 1 addition & 0 deletions src/test/run-fail/overflowing-rsh-4.rs
Expand Up @@ -5,6 +5,7 @@
// truncation does not sidestep the overflow checking.

#![warn(exceeding_bitshifts)]
#![warn(const_err)]

fn main() {
// this signals overflow when checking is on
Expand Down

0 comments on commit 11eb91f

Please sign in to comment.