// test the deref_nullptr lint

#![deny(deref_nullptr)]

use std::ptr;

struct Struct {
    field: u8,
}

fn f() {
    unsafe {
        let a = 1;
        let ub = *(a as *const i32);
        let ub = *(0 as *const i32);
        //~^ ERROR dereferencing a null pointer
        let ub = *ptr::null::<i32>();
        //~^ ERROR dereferencing a null pointer
        let ub = *ptr::null_mut::<i32>();
        //~^ ERROR dereferencing a null pointer
        let ub = *(ptr::null::<i16>() as *const i32);
        //~^ ERROR dereferencing a null pointer
        let ub = *(ptr::null::<i16>() as *mut i32 as *mut usize as *const u8);
        //~^ ERROR dereferencing a null pointer
        let ub = &*ptr::null::<i32>();
        //~^ ERROR dereferencing a null pointer
        let ub = &*ptr::null_mut::<i32>();
        //~^ ERROR dereferencing a null pointer
        ptr::addr_of!(*ptr::null::<i32>());
        //~^ ERROR dereferencing a null pointer
        ptr::addr_of_mut!(*ptr::null_mut::<i32>());
        //~^ ERROR dereferencing a null pointer
        let offset = ptr::addr_of!((*ptr::null::<Struct>()).field);
        //~^ ERROR dereferencing a null pointer
    }
}

fn main() {}
