Rollup merge of #110094 - lukas-code:less-transmute, r=thomcc
clean up `transmute`s in `core` * Use `transmute_unchecked` instead of `transmute_copy` for `MaybeUninit::transpose`. * Use manual transmute for `Option<Ordering>` → `i8`.
This commit is contained in:
commit
aef008aa6d
2 changed files with 9 additions and 13 deletions
|
@ -1287,7 +1287,7 @@ impl<T, const N: usize> MaybeUninit<[T; N]> {
|
|||
#[inline]
|
||||
pub const fn transpose(self) -> [MaybeUninit<T>; N] {
|
||||
// SAFETY: T and MaybeUninit<T> have the same layout
|
||||
unsafe { super::transmute_copy(&ManuallyDrop::new(self)) }
|
||||
unsafe { intrinsics::transmute_unchecked(self) }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1307,6 +1307,6 @@ impl<T, const N: usize> [MaybeUninit<T>; N] {
|
|||
#[inline]
|
||||
pub const fn transpose(self) -> MaybeUninit<[T; N]> {
|
||||
// SAFETY: T and MaybeUninit<T> have the same layout
|
||||
unsafe { super::transmute_copy(&ManuallyDrop::new(self)) }
|
||||
unsafe { intrinsics::transmute_unchecked(self) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// See src/libstd/primitive_docs.rs for documentation.
|
||||
|
||||
use crate::cmp::Ordering::{self, *};
|
||||
use crate::mem::transmute;
|
||||
|
||||
// Recursive macro for implementing n-ary tuple functions and operations
|
||||
//
|
||||
|
@ -142,16 +141,13 @@ macro_rules! maybe_tuple_doc {
|
|||
#[inline]
|
||||
const fn ordering_is_some(c: Option<Ordering>, x: Ordering) -> bool {
|
||||
// FIXME: Just use `==` once that's const-stable on `Option`s.
|
||||
// This isn't using `match` because that optimizes worse due to
|
||||
// making a two-step check (`Some` *then* the inner value).
|
||||
|
||||
// SAFETY: There's no public guarantee for `Option<Ordering>`,
|
||||
// but we're core so we know that it's definitely a byte.
|
||||
unsafe {
|
||||
let c: i8 = transmute(c);
|
||||
let x: i8 = transmute(Some(x));
|
||||
c == x
|
||||
}
|
||||
// This is mapping `None` to 2 and then doing the comparison afterwards
|
||||
// because it optimizes better (`None::<Ordering>` is represented as 2).
|
||||
x as i8
|
||||
== match c {
|
||||
Some(c) => c as i8,
|
||||
None => 2,
|
||||
}
|
||||
}
|
||||
|
||||
// Constructs an expression that performs a lexical ordering using method `$rel`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue