Skip to content

Commit

Permalink
Add unstably const support for assume intrinsic
Browse files Browse the repository at this point in the history
  • Loading branch information
tesuji committed Sep 20, 2020
1 parent 3e08354 commit 4387480
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
6 changes: 6 additions & 0 deletions compiler/rustc_mir/src/interpret/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,12 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
// These just return their argument
self.copy_op(args[0], dest)?;
}
sym::assume => {
let cond = self.read_scalar(args[0])?.check_init()?.to_bool()?;
if !cond {
throw_ub_format!("`assume` intrinsic called with `false`");
}
}
_ => return Ok(false),
}

Expand Down
1 change: 1 addition & 0 deletions library/core/src/intrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -733,6 +733,7 @@ extern "rust-intrinsic" {
/// own, or if it does not enable any significant optimizations.
///
/// This intrinsic does not have a stable counterpart.
#[rustc_const_unstable(feature = "const_assume", issue = "76972")]
pub fn assume(b: bool);

/// Hints to the compiler that branch condition is likely to be true.
Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/consts/const-eval/const_assume.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// check-pass

// Check that `const_assume` feature allow `assume` intrinsic
// to be used in const contexts.

#![feature(core_intrinsics, const_assume)]

extern crate core;

use core::intrinsics::assume;

pub const unsafe fn foo(x: usize, y: usize) -> usize {
assume(y != 0);
x / y
}

fn main() {}

0 comments on commit 4387480

Please sign in to comment.