mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 15:01:51 +00:00
make raw_eq precondition more restrictive
This commit is contained in:
parent
d60d88fe5c
commit
5848c27c79
@ -173,13 +173,14 @@ macro_rules! is_raw_eq_comparable {
|
||||
)+};
|
||||
}
|
||||
|
||||
// SAFETY: All the ordinary integer types allow all bit patterns as distinct values
|
||||
// SAFETY: All the ordinary integer types have no padding, and are no poointers.
|
||||
is_raw_eq_comparable!(u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize);
|
||||
|
||||
// SAFETY: bool and char have *niches*, but no *padding*, so this is sound
|
||||
// SAFETY: bool and char have *niches*, but no *padding* (and these are not pointer types), so this
|
||||
// is sound
|
||||
is_raw_eq_comparable!(bool, char);
|
||||
|
||||
// SAFETY: Similarly, the non-zero types have a niche, but no undef,
|
||||
// SAFETY: Similarly, the non-zero types have a niche, but no undef and no pointers,
|
||||
// and they compare like their underlying numeric type.
|
||||
is_raw_eq_comparable!(
|
||||
NonZeroU8,
|
||||
|
@ -2277,7 +2277,8 @@ extern "rust-intrinsic" {
|
||||
///
|
||||
/// # Safety
|
||||
///
|
||||
/// It's UB to call this if any of the *bytes* in `*a` or `*b` are uninitialized.
|
||||
/// It's UB to call this if any of the *bytes* in `*a` or `*b` are uninitialized or carries a
|
||||
/// pointer value.
|
||||
/// Note that this is a stricter criterion than just the *values* being
|
||||
/// fully-initialized: if `T` has padding, it's UB to call this intrinsic.
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user