From dc0db358abe19481e475e10c32149b53370f1a1c Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 30 May 2024 05:57:31 +0200 Subject: Merging upstream version 1.72.1+dfsg1. Signed-off-by: Daniel Baumann --- src/tools/clippy/tests/ui/ptr_cast_constness.rs | 62 +++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/tools/clippy/tests/ui/ptr_cast_constness.rs (limited to 'src/tools/clippy/tests/ui/ptr_cast_constness.rs') diff --git a/src/tools/clippy/tests/ui/ptr_cast_constness.rs b/src/tools/clippy/tests/ui/ptr_cast_constness.rs new file mode 100644 index 000000000..2c15cd429 --- /dev/null +++ b/src/tools/clippy/tests/ui/ptr_cast_constness.rs @@ -0,0 +1,62 @@ +//@run-rustfix +//@aux-build:proc_macros.rs:proc-macro + +#![warn(clippy::ptr_cast_constness)] +#![allow(clippy::transmute_ptr_to_ref, clippy::unnecessary_cast, unused)] + +extern crate proc_macros; +use proc_macros::{external, inline_macros}; + +unsafe fn ptr_to_ref(p: *const T, om: *mut U) { + let _: &mut T = std::mem::transmute(p as *mut T); + let _ = &mut *(p as *mut T); + let _: &T = &*(om as *const T); +} + +#[inline_macros] +fn main() { + let ptr: *const u32 = &42_u32; + let mut_ptr: *mut u32 = &mut 42_u32; + + let _ = ptr as *const u32; + let _ = mut_ptr as *mut u32; + + // Make sure the lint can handle the difference in their operator precedences. + unsafe { + let ptr_ptr: *const *const u32 = &ptr; + let _ = *ptr_ptr as *mut u32; + } + + let _ = ptr as *mut u32; + let _ = mut_ptr as *const u32; + + // Lint this, since pointer::cast_mut and pointer::cast_const have ?Sized + let ptr_of_array: *const [u32; 4] = &[1, 2, 3, 4]; + let _ = ptr_of_array as *const [u32]; + let _ = ptr_of_array as *const dyn std::fmt::Debug; + + // Make sure the lint is triggered inside a macro + let _ = inline!($ptr as *const u32); + + // Do not lint inside macros from external crates + let _ = external!($ptr as *const u32); +} + +#[clippy::msrv = "1.64"] +fn _msrv_1_64() { + let ptr: *const u32 = &42_u32; + let mut_ptr: *mut u32 = &mut 42_u32; + + // `pointer::cast_const` and `pointer::cast_mut` were stabilized in 1.65. Do not lint this + let _ = ptr as *mut u32; + let _ = mut_ptr as *const u32; +} + +#[clippy::msrv = "1.65"] +fn _msrv_1_65() { + let ptr: *const u32 = &42_u32; + let mut_ptr: *mut u32 = &mut 42_u32; + + let _ = ptr as *mut u32; + let _ = mut_ptr as *const u32; +} -- cgit v1.2.3