about summary refs log tree commit diff
path: root/tests/ui/precondition-checks/zero-size-null.rs
blob: 55d768fc9e58e66561bc64dadd7abdffd15814ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Test that none of the precondition checks panic on zero-sized reads or writes through null.

//@ run-pass
//@ compile-flags: -Zmir-opt-level=0 -Copt-level=0 -Cdebug-assertions=yes

use std::ptr;

fn main() {
    unsafe {
        #[expect(invalid_null_arguments)] // false-positive, copy of 0
        ptr::copy_nonoverlapping::<u8>(ptr::null(), ptr::null_mut(), 0);
        ptr::copy_nonoverlapping::<()>(ptr::null(), ptr::null_mut(), 123);
        #[expect(invalid_null_arguments)] // false-positive, copy of 0
        ptr::copy::<u8>(ptr::null(), ptr::null_mut(), 0);
        ptr::copy::<()>(ptr::null(), ptr::null_mut(), 123);
        ptr::swap::<()>(ptr::null_mut(), ptr::null_mut());
        ptr::replace::<()>(ptr::null_mut(), ());
        ptr::read::<()>(ptr::null());
        ptr::write::<()>(ptr::null_mut(), ());
        ptr::read_volatile::<()>(ptr::null());
        ptr::write_volatile::<()>(ptr::null_mut(), ());
    }
}