diff options
| author | bors <bors@rust-lang.org> | 2021-01-22 00:01:53 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-01-22 00:01:53 +0000 |
| commit | a9a396d8ed0244ba8bb3fe1793ae2a6fdabd7754 (patch) | |
| tree | c428fe61b739acb0e673343d5aab45bfc44ec159 | |
| parent | 202720bf483088dbdb343f78c0aa77067fdd8156 (diff) | |
| parent | dc04ceae710a432baa11ddb986541d89253279a4 (diff) | |
| download | rust-a9a396d8ed0244ba8bb3fe1793ae2a6fdabd7754.tar.gz rust-a9a396d8ed0244ba8bb3fe1793ae2a6fdabd7754.zip | |
Auto merge of #81160 - RalfJung:swap, r=oli-obk
use raw-ptr-addr-of for slice::swap Fixes https://github.com/rust-lang/rust/issues/80682
| -rw-r--r-- | library/core/src/lib.rs | 1 | ||||
| -rw-r--r-- | library/core/src/slice/mod.rs | 7 |
2 files changed, 4 insertions, 4 deletions
diff --git a/library/core/src/lib.rs b/library/core/src/lib.rs index df8d9ff371f..263c6c9cf0f 100644 --- a/library/core/src/lib.rs +++ b/library/core/src/lib.rs @@ -126,6 +126,7 @@ #![feature(auto_traits)] #![feature(or_patterns)] #![feature(prelude_import)] +#![feature(raw_ref_macros)] #![feature(repr_simd, platform_intrinsics)] #![feature(rustc_attrs)] #![feature(simd_ffi)] diff --git a/library/core/src/slice/mod.rs b/library/core/src/slice/mod.rs index de8d7fc29dc..b06b6e93373 100644 --- a/library/core/src/slice/mod.rs +++ b/library/core/src/slice/mod.rs @@ -542,10 +542,9 @@ impl<T> [T] { #[stable(feature = "rust1", since = "1.0.0")] #[inline] pub fn swap(&mut self, a: usize, b: usize) { - // Can't take two mutable loans from one vector, so instead just cast - // them to their raw pointers to do the swap. - let pa: *mut T = &mut self[a]; - let pb: *mut T = &mut self[b]; + // Can't take two mutable loans from one vector, so instead use raw pointers. + let pa = ptr::raw_mut!(self[a]); + let pb = ptr::raw_mut!(self[b]); // SAFETY: `pa` and `pb` have been created from safe mutable references and refer // to elements in the slice and therefore are guaranteed to be valid and aligned. // Note that accessing the elements behind `a` and `b` is checked and will |
