mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-30 16:26:10 +00:00
48 lines
2.1 KiB
Rust
48 lines
2.1 KiB
Rust
// Checks for the `integer_to_pointer_transmutes` lint
|
|
|
|
//@ check-pass
|
|
//@ run-rustfix
|
|
|
|
#![allow(unused_unsafe)]
|
|
#![allow(dead_code)]
|
|
|
|
unsafe fn should_lint(a: usize) {
|
|
let _ptr: *const u8 = unsafe { std::ptr::with_exposed_provenance::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ptr: *mut u8 = unsafe { std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ref: &'static u8 = unsafe { &*std::ptr::with_exposed_provenance::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ref: &'static mut u8 = unsafe { &mut *std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
|
|
let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(42usize) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(a + a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
}
|
|
|
|
const unsafe fn should_lintin_const(a: usize) {
|
|
let _ptr: *const u8 = unsafe { std::ptr::with_exposed_provenance::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ptr: *mut u8 = unsafe { std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ref: &'static u8 = unsafe { &*std::ptr::with_exposed_provenance::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ref: &'static mut u8 = unsafe { &mut *std::ptr::with_exposed_provenance_mut::<u8>(a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
|
|
let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(42usize) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
let _ptr = unsafe { std::ptr::with_exposed_provenance::<u8>(a + a) };
|
|
//~^ WARN transmuting an integer to a pointer
|
|
}
|
|
|
|
unsafe fn should_not_lint(a: usize) {
|
|
let _ptr = unsafe { std::mem::transmute::<usize, *const u8>(0usize) }; // linted by other lints
|
|
let _ptr = unsafe { std::mem::transmute::<usize, *const ()>(a) }; // inner type is a ZST
|
|
let _ptr = unsafe { std::mem::transmute::<usize, fn()>(a) }; // omit fn-ptr for now
|
|
}
|
|
|
|
fn main() {}
|