rust/tests/ui/ref_as_ptr.fixed
2024-02-23 21:33:53 -05:00

117 lines
3.0 KiB
Rust

#![warn(clippy::ref_as_ptr)]
#![allow(clippy::unnecessary_mut_passed)]
fn f<T>(_: T) {}
fn main() {
f(std::ptr::from_ref(&1u8));
f(std::ptr::from_ref::<u32>(&2u32));
f(std::ptr::from_ref::<f64>(&3.0f64));
f(std::ptr::from_ref(&4) as *const f32);
f(std::ptr::from_ref::<f32>(&5.0f32) as *const u32);
f(std::ptr::from_ref(&mut 6u8));
f(std::ptr::from_ref::<u32>(&mut 7u32));
f(std::ptr::from_ref::<f64>(&mut 8.0f64));
f(std::ptr::from_ref(&mut 9) as *const f32);
f(std::ptr::from_ref::<f32>(&mut 10.0f32) as *const u32);
f(std::ptr::from_mut(&mut 11u8));
f(std::ptr::from_mut::<u32>(&mut 12u32));
f(std::ptr::from_mut::<f64>(&mut 13.0f64));
f(std::ptr::from_mut(&mut 14) as *const f32);
f(std::ptr::from_mut::<f32>(&mut 15.0f32) as *const u32);
f(std::ptr::from_ref(&1u8));
f(std::ptr::from_ref::<u32>(&2u32));
f(std::ptr::from_ref::<f64>(&3.0f64));
f(std::ptr::from_ref(&4) as *const f32);
f(std::ptr::from_ref::<f32>(&5.0f32) as *const u32);
let val = 1;
f(std::ptr::from_ref(&val));
f(std::ptr::from_ref::<i32>(&val));
f(std::ptr::from_ref(&val) as *const f32);
f(std::ptr::from_ref::<i32>(&val) as *const f64);
let mut val: u8 = 2;
f(std::ptr::from_mut::<u8>(&mut val));
f(std::ptr::from_mut(&mut val));
f(std::ptr::from_ref::<u8>(&mut val));
f(std::ptr::from_ref(&mut val));
f(std::ptr::from_ref::<u8>(&mut val) as *const f64);
f::<*const Option<u8>>(std::ptr::from_ref(&mut val) as *const _);
f(std::ptr::from_ref::<[usize; 7]>(&std::array::from_fn(|i| i * i)));
f(std::ptr::from_ref::<[usize; 8]>(&mut std::array::from_fn(|i| i * i)));
f(std::ptr::from_mut::<[usize; 9]>(&mut std::array::from_fn(|i| i * i)));
let _ = &String::new() as *const _;
let _ = &mut String::new() as *mut _;
const FOO: *const String = &String::new() as *const _;
}
#[clippy::msrv = "1.75"]
fn _msrv_1_75() {
let val = &42_i32;
let mut_val = &mut 42_i32;
// `std::ptr::from_{ref, mut}` was stabilized in 1.76. Do not lint this
f(val as *const i32);
f(mut_val as *mut i32);
}
#[clippy::msrv = "1.76"]
fn _msrv_1_76() {
let val = &42_i32;
let mut_val = &mut 42_i32;
f(std::ptr::from_ref::<i32>(val));
f(std::ptr::from_mut::<i32>(mut_val));
}
fn foo(val: &[u8]) {
f(std::ptr::from_ref(val));
f(std::ptr::from_ref::<[u8]>(val));
}
fn bar(val: &mut str) {
f(std::ptr::from_mut(val));
f(std::ptr::from_mut::<str>(val));
}
struct X<'a>(&'a i32);
impl<'a> X<'a> {
fn foo(&self) -> *const i64 {
std::ptr::from_ref(self.0) as *const _
}
fn bar(&mut self) -> *const i64 {
std::ptr::from_ref(self.0) as *const _
}
}
struct Y<'a>(&'a mut i32);
impl<'a> Y<'a> {
fn foo(&self) -> *const i64 {
std::ptr::from_ref(self.0) as *const _
}
fn bar(&mut self) -> *const i64 {
std::ptr::from_ref(self.0) as *const _
}
fn baz(&mut self) -> *const i64 {
std::ptr::from_mut(self.0) as *mut _
}
}