about summary refs log tree commit diff
path: root/src/tools/clippy/tests/ui/ref_as_ptr.fixed
blob: ce144508581ea11cee6603905f5610ad2dfd1d95 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#![warn(clippy::ref_as_ptr)]
#![allow(clippy::unnecessary_mut_passed, clippy::needless_lifetimes)]

fn f<T>(_: T) {}

fn main() {
    f(std::ptr::from_ref(&1u8));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<u32>(&2u32));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f64>(&3.0f64));
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&4) as *const f32);
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f32>(&5.0f32) as *const u32);
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&mut 6u8));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<u32>(&mut 7u32));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f64>(&mut 8.0f64));
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&mut 9) as *const f32);
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f32>(&mut 10.0f32) as *const u32);
    //~^ ref_as_ptr

    f(std::ptr::from_mut(&mut 11u8));
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<u32>(&mut 12u32));
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<f64>(&mut 13.0f64));
    //~^ ref_as_ptr

    f(std::ptr::from_mut(&mut 14) as *const f32);
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<f32>(&mut 15.0f32) as *const u32);
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&1u8));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<u32>(&2u32));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f64>(&3.0f64));
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&4) as *const f32);
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<f32>(&5.0f32) as *const u32);
    //~^ ref_as_ptr

    let val = 1;
    f(std::ptr::from_ref(&val));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<i32>(&val));
    //~^ ref_as_ptr

    f(std::ptr::from_ref(&val) as *const f32);
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<i32>(&val) as *const f64);
    //~^ ref_as_ptr

    let mut val: u8 = 2;
    f(std::ptr::from_mut::<u8>(&mut val));
    //~^ ref_as_ptr
    f(std::ptr::from_mut(&mut val));
    //~^ ref_as_ptr

    f(std::ptr::from_ref::<u8>(&mut val));
    //~^ ref_as_ptr
    f(std::ptr::from_ref(&mut val));
    //~^ ref_as_ptr

    f(std::ptr::from_ref::<u8>(&mut val) as *const f64);
    //~^ ref_as_ptr
    f::<*const Option<u8>>(std::ptr::from_ref(&mut val) as *const _);
    //~^ ref_as_ptr

    f(std::ptr::from_ref::<[usize; 7]>(&std::array::from_fn(|i| i * i)));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<[usize; 8]>(&mut std::array::from_fn(|i| i * i)));
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<[usize; 9]>(&mut std::array::from_fn(|i| i * i)));
    //~^ ref_as_ptr

    let _ = &String::new() as *const _;
    let _ = &mut String::new() as *mut _;
    const FOO: *const String = &String::new() as *const _;
}

#[clippy::msrv = "1.75"]
fn _msrv_1_75() {
    let val = &42_i32;
    let mut_val = &mut 42_i32;

    // `std::ptr::from_{ref, mut}` was stabilized in 1.76. Do not lint this
    f(val as *const i32);
    f(mut_val as *mut i32);
}

#[clippy::msrv = "1.76"]
fn _msrv_1_76() {
    let val = &42_i32;
    let mut_val = &mut 42_i32;

    f(std::ptr::from_ref::<i32>(val));
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<i32>(mut_val));
    //~^ ref_as_ptr
}

fn foo(val: &[u8]) {
    f(std::ptr::from_ref(val));
    //~^ ref_as_ptr
    f(std::ptr::from_ref::<[u8]>(val));
    //~^ ref_as_ptr
}

fn bar(val: &mut str) {
    f(std::ptr::from_mut(val));
    //~^ ref_as_ptr
    f(std::ptr::from_mut::<str>(val));
    //~^ ref_as_ptr
}

struct X<'a>(&'a i32);

impl<'a> X<'a> {
    fn foo(&self) -> *const i64 {
        std::ptr::from_ref(self.0) as *const _
        //~^ ref_as_ptr
    }

    fn bar(&mut self) -> *const i64 {
        std::ptr::from_ref(self.0) as *const _
        //~^ ref_as_ptr
    }
}

struct Y<'a>(&'a mut i32);

impl<'a> Y<'a> {
    fn foo(&self) -> *const i64 {
        std::ptr::from_ref(self.0) as *const _
        //~^ ref_as_ptr
    }

    fn bar(&mut self) -> *const i64 {
        std::ptr::from_ref(self.0) as *const _
        //~^ ref_as_ptr
    }

    fn baz(&mut self) -> *const i64 {
        std::ptr::from_mut(self.0) as *mut _
        //~^ ref_as_ptr
    }
}