diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-07-06 13:26:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-06 13:26:25 +0200 |
| commit | 2137d19ef6a65c00a3d7f4034bb76628651625d7 (patch) | |
| tree | df67cd39a96e94a9506e727317747e22bee946e1 /compiler/rustc_const_eval/src | |
| parent | 28cc0b643d6c07e2e0ba24a85f397963961b4c0d (diff) | |
| parent | 9ba492f2797250b2fcaa38d483ca5c23bf0bd8dd (diff) | |
| download | rust-2137d19ef6a65c00a3d7f4034bb76628651625d7.tar.gz rust-2137d19ef6a65c00a3d7f4034bb76628651625d7.zip | |
Rollup merge of #127275 - RalfJung:offset-from-isize-min, r=Amanieu
offset_from, offset: clearly separate safety requirements the user needs to prove from corollaries that automatically follow By landing https://github.com/rust-lang/rust/pull/116675 we decided that objects larger than `isize::MAX` cannot exist in the address space of a Rust program, which lets us simplify these rules. For `offset_from`, we can even state that the *absolute* distance fits into an `isize`, and therefore exclude `isize::MIN`. This PR also changes Miri to treat an `isize::MIN` difference like the other isize-overflowing cases.
Diffstat (limited to 'compiler/rustc_const_eval/src')
| -rw-r--r-- | compiler/rustc_const_eval/src/interpret/intrinsics.rs | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/rustc_const_eval/src/interpret/intrinsics.rs b/compiler/rustc_const_eval/src/interpret/intrinsics.rs index 1d54da267ee..d86f1a7a34f 100644 --- a/compiler/rustc_const_eval/src/interpret/intrinsics.rs +++ b/compiler/rustc_const_eval/src/interpret/intrinsics.rs @@ -301,9 +301,9 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> { } // The signed form of the intrinsic allows this. If we interpret the // difference as isize, we'll get the proper signed difference. If that - // seems *positive*, they were more than isize::MAX apart. + // seems *positive* or equal to isize::MIN, they were more than isize::MAX apart. let dist = val.to_target_isize(self)?; - if dist >= 0 { + if dist >= 0 || i128::from(dist) == self.pointer_size().signed_int_min() { throw_ub_custom!( fluent::const_eval_offset_from_underflow, name = intrinsic_name, |
