about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/cast_raw_slice_pointer_cast.fixed
blob: 3c1cf8845957f1b511dd35d884d4c83e4fbf7d84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#![warn(clippy::cast_slice_from_raw_parts)]

const fn require_raw_slice_ptr<T>(_: *const [T]) {}

fn main() {
    let mut vec = vec![0u8; 1];
    let ptr: *const u8 = vec.as_ptr();
    let mptr = vec.as_mut_ptr();
    let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts(ptr, 1) };
    //~^ cast_slice_from_raw_parts
    let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts_mut(mptr, 1) };
    //~^ cast_slice_from_raw_parts
    let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
    //~^ cast_slice_from_raw_parts
    {
        use core::slice;
        let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
        //~^ cast_slice_from_raw_parts
        use slice as one;
        let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
        //~^ cast_slice_from_raw_parts
    }
    {
        use std::slice;
        let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
        //~^ cast_slice_from_raw_parts
        use slice as one;
        let _: *const [u8] = std::ptr::slice_from_raw_parts(ptr, 1);
        //~^ cast_slice_from_raw_parts
    }

    // implicit cast
    {
        let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts(ptr, 1) };
        //~^ cast_slice_from_raw_parts
        let _: *mut [u8] = unsafe { std::ptr::slice_from_raw_parts_mut(mptr, 1) };
        //~^ cast_slice_from_raw_parts
        require_raw_slice_ptr(unsafe { std::ptr::slice_from_raw_parts(ptr, 1) });
        //~^ cast_slice_from_raw_parts
    }

    // implicit cast in const context
    const {
        const PTR: *const u8 = std::ptr::null();
        const MPTR: *mut u8 = std::ptr::null_mut();
        let _: *const [u8] = unsafe { std::ptr::slice_from_raw_parts(PTR, 1) };
        //~^ cast_slice_from_raw_parts
        let _: *mut [u8] = unsafe { std::ptr::slice_from_raw_parts_mut(MPTR, 1) };
        //~^ cast_slice_from_raw_parts
        require_raw_slice_ptr(unsafe { std::ptr::slice_from_raw_parts(PTR, 1) });
        //~^ cast_slice_from_raw_parts
    };
}