1
Fork 0

deny(unsafe_op_in_unsafe_fn) in rustc_data_structures

This commit is contained in:
Maybe Waffle 2023-04-19 18:00:48 +00:00
parent d7f9e81650
commit f79df7d2a4
4 changed files with 106 additions and 98 deletions

View file

@ -35,6 +35,7 @@
#![allow(rustc::potential_query_instability)] #![allow(rustc::potential_query_instability)]
#![deny(rustc::untranslatable_diagnostic)] #![deny(rustc::untranslatable_diagnostic)]
#![deny(rustc::diagnostic_outside_of_impl)] #![deny(rustc::diagnostic_outside_of_impl)]
#![deny(unsafe_op_in_unsafe_fn)]
#[macro_use] #[macro_use]
extern crate tracing; extern crate tracing;

View file

@ -13,7 +13,8 @@ pub struct Mmap(Vec<u8>);
impl Mmap { impl Mmap {
#[inline] #[inline]
pub unsafe fn map(file: File) -> io::Result<Self> { pub unsafe fn map(file: File) -> io::Result<Self> {
memmap2::Mmap::map(&file).map(Mmap) // Safety: this is in fact not safe.
unsafe { memmap2::Mmap::map(&file).map(Mmap) }
} }
} }

View file

@ -96,6 +96,7 @@ macro_rules! compress {
unsafe fn copy_nonoverlapping_small(src: *const u8, dst: *mut u8, count: usize) { unsafe fn copy_nonoverlapping_small(src: *const u8, dst: *mut u8, count: usize) {
debug_assert!(count <= 8); debug_assert!(count <= 8);
unsafe {
if count == 8 { if count == 8 {
ptr::copy_nonoverlapping(src, dst, 8); ptr::copy_nonoverlapping(src, dst, 8);
return; return;
@ -119,6 +120,7 @@ unsafe fn copy_nonoverlapping_small(src: *const u8, dst: *mut u8, count: usize)
debug_assert_eq!(i, count); debug_assert_eq!(i, count);
} }
}
// # Implementation // # Implementation
// //
@ -232,6 +234,7 @@ impl SipHasher128 {
// overflow) if it wasn't already. // overflow) if it wasn't already.
#[inline(never)] #[inline(never)]
unsafe fn short_write_process_buffer<const LEN: usize>(&mut self, bytes: [u8; LEN]) { unsafe fn short_write_process_buffer<const LEN: usize>(&mut self, bytes: [u8; LEN]) {
unsafe {
let nbuf = self.nbuf; let nbuf = self.nbuf;
debug_assert!(LEN <= 8); debug_assert!(LEN <= 8);
debug_assert!(nbuf < BUFFER_SIZE); debug_assert!(nbuf < BUFFER_SIZE);
@ -265,6 +268,7 @@ impl SipHasher128 {
self.nbuf = if LEN == 1 { 0 } else { nbuf + LEN - BUFFER_SIZE }; self.nbuf = if LEN == 1 { 0 } else { nbuf + LEN - BUFFER_SIZE };
self.processed += BUFFER_SIZE; self.processed += BUFFER_SIZE;
} }
}
// A write function for byte slices. // A write function for byte slices.
#[inline] #[inline]
@ -301,6 +305,7 @@ impl SipHasher128 {
// containing the byte offset `self.nbuf`. // containing the byte offset `self.nbuf`.
#[inline(never)] #[inline(never)]
unsafe fn slice_write_process_buffer(&mut self, msg: &[u8]) { unsafe fn slice_write_process_buffer(&mut self, msg: &[u8]) {
unsafe {
let length = msg.len(); let length = msg.len();
let nbuf = self.nbuf; let nbuf = self.nbuf;
debug_assert!(nbuf < BUFFER_SIZE); debug_assert!(nbuf < BUFFER_SIZE);
@ -353,6 +358,7 @@ impl SipHasher128 {
self.nbuf = extra_bytes_left; self.nbuf = extra_bytes_left;
self.processed += nbuf + processed; self.processed += nbuf + processed;
} }
}
#[inline] #[inline]
pub fn finish128(mut self) -> (u64, u64) { pub fn finish128(mut self) -> (u64, u64) {

View file

@ -153,7 +153,7 @@ unsafe impl<T: ?Sized + Aligned> Pointer for Box<T> {
#[inline] #[inline]
unsafe fn from_ptr(ptr: NonNull<T>) -> Self { unsafe fn from_ptr(ptr: NonNull<T>) -> Self {
// Safety: `ptr` comes from `into_ptr` which calls `Box::into_raw` // Safety: `ptr` comes from `into_ptr` which calls `Box::into_raw`
Box::from_raw(ptr.as_ptr()) unsafe { Box::from_raw(ptr.as_ptr()) }
} }
} }
@ -169,7 +169,7 @@ unsafe impl<T: ?Sized + Aligned> Pointer for Rc<T> {
#[inline] #[inline]
unsafe fn from_ptr(ptr: NonNull<T>) -> Self { unsafe fn from_ptr(ptr: NonNull<T>) -> Self {
// Safety: `ptr` comes from `into_ptr` which calls `Rc::into_raw` // Safety: `ptr` comes from `into_ptr` which calls `Rc::into_raw`
Rc::from_raw(ptr.as_ptr()) unsafe { Rc::from_raw(ptr.as_ptr()) }
} }
} }
@ -185,7 +185,7 @@ unsafe impl<T: ?Sized + Aligned> Pointer for Arc<T> {
#[inline] #[inline]
unsafe fn from_ptr(ptr: NonNull<T>) -> Self { unsafe fn from_ptr(ptr: NonNull<T>) -> Self {
// Safety: `ptr` comes from `into_ptr` which calls `Arc::into_raw` // Safety: `ptr` comes from `into_ptr` which calls `Arc::into_raw`
Arc::from_raw(ptr.as_ptr()) unsafe { Arc::from_raw(ptr.as_ptr()) }
} }
} }
@ -201,7 +201,7 @@ unsafe impl<'a, T: 'a + ?Sized + Aligned> Pointer for &'a T {
unsafe fn from_ptr(ptr: NonNull<T>) -> Self { unsafe fn from_ptr(ptr: NonNull<T>) -> Self {
// Safety: // Safety:
// `ptr` comes from `into_ptr` which gets the pointer from a reference // `ptr` comes from `into_ptr` which gets the pointer from a reference
ptr.as_ref() unsafe { ptr.as_ref() }
} }
} }
@ -217,7 +217,7 @@ unsafe impl<'a, T: 'a + ?Sized + Aligned> Pointer for &'a mut T {
unsafe fn from_ptr(mut ptr: NonNull<T>) -> Self { unsafe fn from_ptr(mut ptr: NonNull<T>) -> Self {
// Safety: // Safety:
// `ptr` comes from `into_ptr` which gets the pointer from a reference // `ptr` comes from `into_ptr` which gets the pointer from a reference
ptr.as_mut() unsafe { ptr.as_mut() }
} }
} }