diff options
| author | Lukas Markeffsky <@> | 2022-10-07 20:57:34 +0200 |
|---|---|---|
| committer | Lukas Markeffsky <@> | 2022-11-19 16:36:08 +0100 |
| commit | f13c4f4d6a4f0bb042839613bc92e9d3cfd9c308 (patch) | |
| tree | cbf35188b951b35e95f32f4843f7e17f4c3c1c3b | |
| parent | 5e6de2369c82ed0b36e6b651b041bad5cb5e1ef8 (diff) | |
| download | rust-f13c4f4d6a4f0bb042839613bc92e9d3cfd9c308.tar.gz rust-f13c4f4d6a4f0bb042839613bc92e9d3cfd9c308.zip | |
constify `exact_div` intrinsic
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/intrinsics.rs | 5 | ||||
| -rw-r--r-- | library/core/src/intrinsics.rs | 1 | ||||
| -rw-r--r-- | library/core/src/lib.rs | 1 | ||||
| -rw-r--r-- | src/tools/miri/src/shims/intrinsics/mod.rs | 5 |
4 files changed, 7 insertions, 5 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/intrinsics.rs b/compiler/rustc_const_eval/src/interpret/intrinsics.rs index 6fc2407b778..7940efcd2b1 100644 --- a/compiler/rustc_const_eval/src/interpret/intrinsics.rs +++ b/compiler/rustc_const_eval/src/interpret/intrinsics.rs @@ -243,6 +243,11 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { let discr_val = self.read_discriminant(&place.into())?.0; self.write_scalar(discr_val, dest)?; } + sym::exact_div => { + let l = self.read_immediate(&args[0])?; + let r = self.read_immediate(&args[1])?; + self.exact_div(&l, &r, dest)?; + } sym::unchecked_shl | sym::unchecked_shr | sym::unchecked_add diff --git a/library/core/src/intrinsics.rs b/library/core/src/intrinsics.rs index 819ccf5a3e9..7ed7d767f2f 100644 --- a/library/core/src/intrinsics.rs +++ b/library/core/src/intrinsics.rs @@ -1851,6 +1851,7 @@ extern "rust-intrinsic" { /// `x % y != 0` or `y == 0` or `x == T::MIN && y == -1` /// /// This intrinsic does not have a stable counterpart. + #[rustc_const_unstable(feature = "const_exact_div", issue = "none")] pub fn exact_div<T: Copy>(x: T, y: T) -> T; /// Performs an unchecked division, resulting in undefined behavior diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index 7191bbb9344..33b969c249a 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -109,6 +109,7 @@ #![feature(const_cmp)] #![feature(const_discriminant)] #![feature(const_eval_select)] +#![feature(const_exact_div)] #![feature(const_float_bits_conv)] #![feature(const_float_classify)] #![feature(const_fmt_arguments_new)] diff --git a/src/tools/miri/src/shims/intrinsics/mod.rs b/src/tools/miri/src/shims/intrinsics/mod.rs index 6004e2078ad..5ea82adb9c6 100644 --- a/src/tools/miri/src/shims/intrinsics/mod.rs +++ b/src/tools/miri/src/shims/intrinsics/mod.rs @@ -368,11 +368,6 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { } // Other - "exact_div" => { - let [num, denom] = check_arg_count(args)?; - this.exact_div(&this.read_immediate(num)?, &this.read_immediate(denom)?, dest)?; - } - "breakpoint" => { let [] = check_arg_count(args)?; // normally this would raise a SIGTRAP, which aborts if no debugger is connected |
