Document unsafety in src/libcore/hash/mod.rs
This commit is contained in:
parent
37514dedab
commit
d1ce7ff84e
1 changed files with 7 additions and 2 deletions
|
|
@ -79,8 +79,6 @@
|
|||
//! }
|
||||
//! ```
|
||||
|
||||
// ignore-tidy-undocumented-unsafe
|
||||
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
use crate::fmt;
|
||||
|
|
@ -572,6 +570,9 @@ mod impls {
|
|||
fn hash_slice<H: Hasher>(data: &[$ty], state: &mut H) {
|
||||
let newlen = data.len() * mem::size_of::<$ty>();
|
||||
let ptr = data.as_ptr() as *const u8;
|
||||
// SAFETY: `ptr` is valid and aligned, the new slice only spans
|
||||
// across `data` and is never mutated, and its total size is the
|
||||
// same as the original `data` so it can't be over `isize::MAX`.
|
||||
state.write(unsafe { slice::from_raw_parts(ptr, newlen) })
|
||||
}
|
||||
}
|
||||
|
|
@ -691,6 +692,8 @@ mod impls {
|
|||
state.write_usize(*self as *const () as usize);
|
||||
} else {
|
||||
// Fat pointer
|
||||
// SAFETY: we are accessing the memory occupied by `self`
|
||||
// which is guaranteed to be valid.
|
||||
let (a, b) = unsafe { *(self as *const Self as *const (usize, usize)) };
|
||||
state.write_usize(a);
|
||||
state.write_usize(b);
|
||||
|
|
@ -706,6 +709,8 @@ mod impls {
|
|||
state.write_usize(*self as *const () as usize);
|
||||
} else {
|
||||
// Fat pointer
|
||||
// SAFETY: we are accessing the memory occupied by `self`
|
||||
// which is guaranteed to be valid.
|
||||
let (a, b) = unsafe { *(self as *const Self as *const (usize, usize)) };
|
||||
state.write_usize(a);
|
||||
state.write_usize(b);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue