]> git.lizzy.rs Git - rust.git/blob - src/test/ui/mir/mir_misc_casts.rs
Merge commit 'e18101137866b79045fee0ef996e696e68c920b4' into clippyup
[rust.git] / src / test / ui / mir / mir_misc_casts.rs
1 // run-pass
2 fn func(){}
3
4 const STR: &'static str = "hello";
5 const BSTR: &'static [u8; 5] = b"hello";
6
7 fn from_ptr()
8 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, *const ()) {
9     let f = 1_usize as *const String;
10     let c1 = f as isize;
11     let c2 = f as usize;
12     let c3 = f as i8;
13     let c4 = f as i16;
14     let c5 = f as i32;
15     let c6 = f as i64;
16     let c7 = f as u8;
17     let c8 = f as u16;
18     let c9 = f as u32;
19     let c10 = f as u64;
20     let c11 = f as *const ();
21     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
22 }
23
24 fn from_1()
25 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
26     let c1 = 1 as isize;
27     let c2 = 1 as usize;
28     let c3 = 1 as i8;
29     let c4 = 1 as i16;
30     let c5 = 1 as i32;
31     let c6 = 1 as i64;
32     let c7 = 1 as u8;
33     let c8 = 1 as u16;
34     let c9 = 1 as u32;
35     let c10 = 1 as u64;
36     let c11 = 1 as f32;
37     let c12 = 1 as f64;
38     let c13 = 1 as *const String;
39     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
40 }
41
42 fn from_1usize()
43 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
44     let c1 = 1_usize as isize;
45     let c2 = 1_usize as usize;
46     let c3 = 1_usize as i8;
47     let c4 = 1_usize as i16;
48     let c5 = 1_usize as i32;
49     let c6 = 1_usize as i64;
50     let c7 = 1_usize as u8;
51     let c8 = 1_usize as u16;
52     let c9 = 1_usize as u32;
53     let c10 = 1_usize as u64;
54     let c11 = 1_usize as f32;
55     let c12 = 1_usize as f64;
56     let c13 = 1_usize as *const String;
57     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
58 }
59
60 fn from_1isize()
61 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
62     let c1 = 1_isize as isize;
63     let c2 = 1_isize as usize;
64     let c3 = 1_isize as i8;
65     let c4 = 1_isize as i16;
66     let c5 = 1_isize as i32;
67     let c6 = 1_isize as i64;
68     let c7 = 1_isize as u8;
69     let c8 = 1_isize as u16;
70     let c9 = 1_isize as u32;
71     let c10 = 1_isize as u64;
72     let c11 = 1_isize as f32;
73     let c12 = 1_isize as f64;
74     let c13 = 1_isize as *const String;
75     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
76 }
77
78 fn from_1u8()
79 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
80     let c1 = 1_u8 as isize;
81     let c2 = 1_u8 as usize;
82     let c3 = 1_u8 as i8;
83     let c4 = 1_u8 as i16;
84     let c5 = 1_u8 as i32;
85     let c6 = 1_u8 as i64;
86     let c7 = 1_u8 as u8;
87     let c8 = 1_u8 as u16;
88     let c9 = 1_u8 as u32;
89     let c10 = 1_u8 as u64;
90     let c11 = 1_u8 as f32;
91     let c12 = 1_u8 as f64;
92     let c13 = 1_u8 as *const String;
93     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
94 }
95
96 fn from_1i8()
97 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
98     let c1 = 1_i8 as isize;
99     let c2 = 1_i8 as usize;
100     let c3 = 1_i8 as i8;
101     let c4 = 1_i8 as i16;
102     let c5 = 1_i8 as i32;
103     let c6 = 1_i8 as i64;
104     let c7 = 1_i8 as u8;
105     let c8 = 1_i8 as u16;
106     let c9 = 1_i8 as u32;
107     let c10 = 1_i8 as u64;
108     let c11 = 1_i8 as f32;
109     let c12 = 1_i8 as f64;
110     let c13 = 1_i8 as *const String;
111     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
112 }
113
114 fn from_1u16()
115 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
116     let c1 = 1_u16 as isize;
117     let c2 = 1_u16 as usize;
118     let c3 = 1_u16 as i8;
119     let c4 = 1_u16 as i16;
120     let c5 = 1_u16 as i32;
121     let c6 = 1_u16 as i64;
122     let c7 = 1_u16 as u8;
123     let c8 = 1_u16 as u16;
124     let c9 = 1_u16 as u32;
125     let c10 = 1_u16 as u64;
126     let c11 = 1_u16 as f32;
127     let c12 = 1_u16 as f64;
128     let c13 = 1_u16 as *const String;
129     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
130 }
131
132 fn from_1i16()
133 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
134     let c1 = 1_i16 as isize;
135     let c2 = 1_i16 as usize;
136     let c3 = 1_i16 as i8;
137     let c4 = 1_i16 as i16;
138     let c5 = 1_i16 as i32;
139     let c6 = 1_i16 as i64;
140     let c7 = 1_i16 as u8;
141     let c8 = 1_i16 as u16;
142     let c9 = 1_i16 as u32;
143     let c10 = 1_i16 as u64;
144     let c11 = 1_i16 as f32;
145     let c12 = 1_i16 as f64;
146     let c13 = 1_i16 as *const String;
147     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
148 }
149
150 fn from_1u32()
151 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
152     let c1 = 1_u32 as isize;
153     let c2 = 1_u32 as usize;
154     let c3 = 1_u32 as i8;
155     let c4 = 1_u32 as i16;
156     let c5 = 1_u32 as i32;
157     let c6 = 1_u32 as i64;
158     let c7 = 1_u32 as u8;
159     let c8 = 1_u32 as u16;
160     let c9 = 1_u32 as u32;
161     let c10 = 1_u32 as u64;
162     let c11 = 1_u32 as f32;
163     let c12 = 1_u32 as f64;
164     let c13 = 1_u32 as *const String;
165     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
166 }
167
168 fn from_1i32()
169 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
170     let c1 = 1_i32 as isize;
171     let c2 = 1_i32 as usize;
172     let c3 = 1_i32 as i8;
173     let c4 = 1_i32 as i16;
174     let c5 = 1_i32 as i32;
175     let c6 = 1_i32 as i64;
176     let c7 = 1_i32 as u8;
177     let c8 = 1_i32 as u16;
178     let c9 = 1_i32 as u32;
179     let c10 = 1_i32 as u64;
180     let c11 = 1_i32 as f32;
181     let c12 = 1_i32 as f64;
182     let c13 = 1_i32 as *const String;
183     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
184 }
185
186 fn from_1u64()
187 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
188     let c1 = 1_u64 as isize;
189     let c2 = 1_u64 as usize;
190     let c3 = 1_u64 as i8;
191     let c4 = 1_u64 as i16;
192     let c5 = 1_u64 as i32;
193     let c6 = 1_u64 as i64;
194     let c7 = 1_u64 as u8;
195     let c8 = 1_u64 as u16;
196     let c9 = 1_u64 as u32;
197     let c10 = 1_u64 as u64;
198     let c11 = 1_u64 as f32;
199     let c12 = 1_u64 as f64;
200     let c13 = 1_u64 as *const String;
201     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
202 }
203
204 fn from_1i64()
205 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const String) {
206     let c1 = 1_i64 as isize;
207     let c2 = 1_i64 as usize;
208     let c3 = 1_i64 as i8;
209     let c4 = 1_i64 as i16;
210     let c5 = 1_i64 as i32;
211     let c6 = 1_i64 as i64;
212     let c7 = 1_i64 as u8;
213     let c8 = 1_i64 as u16;
214     let c9 = 1_i64 as u32;
215     let c10 = 1_i64 as u64;
216     let c11 = 1_i64 as f32;
217     let c12 = 1_i64 as f64;
218     let c13 = 1_i64 as *const String;
219     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
220 }
221
222 fn from_bool()
223 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64) {
224     let c1 = true as isize;
225     let c2 = true as usize;
226     let c3 = true as i8;
227     let c4 = true as i16;
228     let c5 = true as i32;
229     let c6 = true as i64;
230     let c7 = true as u8;
231     let c8 = true as u16;
232     let c9 = true as u32;
233     let c10 = true as u64;
234     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
235 }
236
237 fn from_1f32()
238 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
239     let c1 = 1.0_f32 as isize;
240     let c2 = 1.0_f32 as usize;
241     let c3 = 1.0_f32 as i8;
242     let c4 = 1.0_f32 as i16;
243     let c5 = 1.0_f32 as i32;
244     let c6 = 1.0_f32 as i64;
245     let c7 = 1.0_f32 as u8;
246     let c8 = 1.0_f32 as u16;
247     let c9 = 1.0_f32 as u32;
248     let c10 = 1.0_f32 as u64;
249     let c11 = 1.0_f32 as f32;
250     let c12 = 1.0_f32 as f64;
251     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
252 }
253
254 fn from_1f64()
255 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
256     let c1 = 1.0f64 as isize;
257     let c2 = 1.0f64 as usize;
258     let c3 = 1.0f64 as i8;
259     let c4 = 1.0f64 as i16;
260     let c5 = 1.0f64 as i32;
261     let c6 = 1.0f64 as i64;
262     let c7 = 1.0f64 as u8;
263     let c8 = 1.0f64 as u16;
264     let c9 = 1.0f64 as u32;
265     let c10 = 1.0f64 as u64;
266     let c11 = 1.0f64 as f32;
267     let c12 = 1.0f64 as f64;
268     (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
269 }
270
271 fn other_casts()
272 -> (*const u8, *const isize, *const u8, *const u8) {
273     let c1 = func as *const u8;
274     let c2 = c1 as *const isize;
275
276     let r = &42u32;
277     let _ = r as *const u32;
278
279     // fat-ptr -> fat-ptr -> fat-raw-ptr -> thin-ptr
280     let c3 = STR as &str as *const str as *const u8;
281
282     let c4 = BSTR as *const [u8] as *const [u16] as *const u8;
283     (c1, c2, c3, c4)
284 }
285
286 pub fn assert_eq_13(l: (isize, usize, i8, i16, i32, i64, u8,
287                         u16, u32, u64, f32, f64, *const String),
288                     r: (isize, usize, i8, i16, i32, i64, u8,
289                         u16, u32, u64, f32, f64, *const String)) -> bool {
290     let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = l;
291     let (r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13) = r;
292     l1 == r1 && l2 == r2 && l3 == r3 && l4 == r4 && l5 == r5 && l6 == r6 && l7 == r7 &&
293     l8 == r8 && l9 == r9 && l10 == r10 && l11 == r11 && l12 == r12 && l13 == r13
294 }
295
296
297 pub fn main() {
298     let f = 1_usize as *const String;
299     let t13 = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.0, 1.0, f);
300     let t12 = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.0, 1.0);
301     assert_eq_13(from_1(), t13);
302     assert_eq_13(from_1usize(), t13);
303     assert_eq_13(from_1isize(), t13);
304     assert_eq_13(from_1u8(), t13);
305     assert_eq_13(from_1i8(), t13);
306     assert_eq_13(from_1u16(), t13);
307     assert_eq_13(from_1i16(), t13);
308     assert_eq_13(from_1u32(), t13);
309     assert_eq_13(from_1i32(), t13);
310     assert_eq_13(from_1u64(), t13);
311     assert_eq_13(from_1i64(), t13);
312     assert_eq!(from_1f32(), t12);
313     assert_eq!(from_1f64(), t12);
314
315     assert_eq!(from_ptr(), (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 as *const ()));
316     assert_eq!(from_bool(), (1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
317
318     assert_eq!(other_casts(), (func as *const u8, func as *const isize,
319                                STR as *const str as *const u8, BSTR as *const [u8] as *const u8));
320 }