#![feature(extern_types)]
#![warn(clippy::manual_dangling_ptr)]
use std::mem;

pub fn foo(_const: *const f32, _mut: *mut i32) {}

fn main() {
    let _: *const u8 = std::ptr::dangling();
    //~^ manual_dangling_ptr
    let _ = std::ptr::dangling::<u32>();
    //~^ manual_dangling_ptr
    let _ = std::ptr::dangling_mut::<f32>();
    //~^ manual_dangling_ptr

    let _ = std::ptr::dangling::<u8>();
    //~^ manual_dangling_ptr
    let _ = std::ptr::dangling::<u32>();
    //~^ manual_dangling_ptr
    let _ = std::ptr::dangling::<usize>();
    //~^ manual_dangling_ptr

    foo(std::ptr::dangling(), std::ptr::dangling_mut());
    //~^ manual_dangling_ptr
    //~| manual_dangling_ptr
}

fn should_not_lint() {
    let _ = 0x10 as *mut i32;
    let _ = mem::align_of::<u32>() as *const u8;

    foo(0 as _, 0 as _);
}

#[clippy::msrv = "1.83"]
fn _msrv_1_83() {
    // `{core, std}::ptr::dangling` was stabilized in 1.84. Do not lint this
    foo(4 as *const _, 4 as *mut _);
}

#[clippy::msrv = "1.84"]
fn _msrv_1_84() {
    foo(std::ptr::dangling(), std::ptr::dangling_mut());
    //~^ manual_dangling_ptr
    //~| manual_dangling_ptr
}

fn issue16459() {
    unsafe extern "C" {
        type Extern;
    }
    let _ = unsafe { &mut *(1 as *mut Extern) };

    struct Empty;
    let _ = unsafe { &mut *std::ptr::dangling_mut::<Empty>() };
    //~^ manual_dangling_ptr
}
