pub static DANGEROUS_IMPLICIT_AUTOREFS: &Lint
Expand description
The dangerous_implicit_autorefs
lint checks for implicitly taken references
to dereferences of raw pointers.
§Example
unsafe fn fun(ptr: *mut [u8]) -> *mut [u8] {
unsafe { &raw mut (*ptr)[..16] }
// ^^^^^^ this calls `IndexMut::index_mut(&mut ..., ..16)`,
// implicitly creating a reference
}
{{produces}}
§Explanation
When working with raw pointers it’s usually undesirable to create references, since they inflict additional safety requirements. Unfortunately, it’s possible to take a reference to the dereference of a raw pointer implicitly, which inflicts the usual reference requirements.
If you are sure that you can soundly take a reference, then you can take it explicitly:
unsafe fn fun(ptr: *mut [u8]) -> *mut [u8] {
unsafe { &raw mut (&mut *ptr)[..16] }
}
Otherwise try to find an alternative way to achive your goals using only raw pointers:
use std::ptr;
fn fun(ptr: *mut [u8]) -> *mut [u8] {
ptr::slice_from_raw_parts_mut(ptr.cast(), 16)
}