1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 #![feature(libc, rustc_attrs)]
17 const STR: &'static str = "hello";
18 const BSTR: &'static [u8; 5] = b"hello";
22 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, *const ()) {
23 let f = 1_usize as *const libc::FILE;
34 let c11 = f as *const ();
35 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
40 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
53 let c13 = 1 as *const libc::FILE;
54 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
59 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
60 let c1 = 1_usize as isize;
61 let c2 = 1_usize as usize;
62 let c3 = 1_usize as i8;
63 let c4 = 1_usize as i16;
64 let c5 = 1_usize as i32;
65 let c6 = 1_usize as i64;
66 let c7 = 1_usize as u8;
67 let c8 = 1_usize as u16;
68 let c9 = 1_usize as u32;
69 let c10 = 1_usize as u64;
70 let c11 = 1_usize as f32;
71 let c12 = 1_usize as f64;
72 let c13 = 1_usize as *const libc::FILE;
73 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
78 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
79 let c1 = 1_isize as isize;
80 let c2 = 1_isize as usize;
81 let c3 = 1_isize as i8;
82 let c4 = 1_isize as i16;
83 let c5 = 1_isize as i32;
84 let c6 = 1_isize as i64;
85 let c7 = 1_isize as u8;
86 let c8 = 1_isize as u16;
87 let c9 = 1_isize as u32;
88 let c10 = 1_isize as u64;
89 let c11 = 1_isize as f32;
90 let c12 = 1_isize as f64;
91 let c13 = 1_isize as *const libc::FILE;
92 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
97 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
98 let c1 = 1_u8 as isize;
99 let c2 = 1_u8 as usize;
101 let c4 = 1_u8 as i16;
102 let c5 = 1_u8 as i32;
103 let c6 = 1_u8 as i64;
105 let c8 = 1_u8 as u16;
106 let c9 = 1_u8 as u32;
107 let c10 = 1_u8 as u64;
108 let c11 = 1_u8 as f32;
109 let c12 = 1_u8 as f64;
110 let c13 = 1_u8 as *const libc::FILE;
111 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
116 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
117 let c1 = 1_i8 as isize;
118 let c2 = 1_i8 as usize;
120 let c4 = 1_i8 as i16;
121 let c5 = 1_i8 as i32;
122 let c6 = 1_i8 as i64;
124 let c8 = 1_i8 as u16;
125 let c9 = 1_i8 as u32;
126 let c10 = 1_i8 as u64;
127 let c11 = 1_i8 as f32;
128 let c12 = 1_i8 as f64;
129 let c13 = 1_i8 as *const libc::FILE;
130 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
135 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
136 let c1 = 1_u16 as isize;
137 let c2 = 1_u16 as usize;
138 let c3 = 1_u16 as i8;
139 let c4 = 1_u16 as i16;
140 let c5 = 1_u16 as i32;
141 let c6 = 1_u16 as i64;
142 let c7 = 1_u16 as u8;
143 let c8 = 1_u16 as u16;
144 let c9 = 1_u16 as u32;
145 let c10 = 1_u16 as u64;
146 let c11 = 1_u16 as f32;
147 let c12 = 1_u16 as f64;
148 let c13 = 1_u16 as *const libc::FILE;
149 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
154 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
155 let c1 = 1_i16 as isize;
156 let c2 = 1_i16 as usize;
157 let c3 = 1_i16 as i8;
158 let c4 = 1_i16 as i16;
159 let c5 = 1_i16 as i32;
160 let c6 = 1_i16 as i64;
161 let c7 = 1_i16 as u8;
162 let c8 = 1_i16 as u16;
163 let c9 = 1_i16 as u32;
164 let c10 = 1_i16 as u64;
165 let c11 = 1_i16 as f32;
166 let c12 = 1_i16 as f64;
167 let c13 = 1_i16 as *const libc::FILE;
168 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
173 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
174 let c1 = 1_u32 as isize;
175 let c2 = 1_u32 as usize;
176 let c3 = 1_u32 as i8;
177 let c4 = 1_u32 as i16;
178 let c5 = 1_u32 as i32;
179 let c6 = 1_u32 as i64;
180 let c7 = 1_u32 as u8;
181 let c8 = 1_u32 as u16;
182 let c9 = 1_u32 as u32;
183 let c10 = 1_u32 as u64;
184 let c11 = 1_u32 as f32;
185 let c12 = 1_u32 as f64;
186 let c13 = 1_u32 as *const libc::FILE;
187 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
192 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
193 let c1 = 1_i32 as isize;
194 let c2 = 1_i32 as usize;
195 let c3 = 1_i32 as i8;
196 let c4 = 1_i32 as i16;
197 let c5 = 1_i32 as i32;
198 let c6 = 1_i32 as i64;
199 let c7 = 1_i32 as u8;
200 let c8 = 1_i32 as u16;
201 let c9 = 1_i32 as u32;
202 let c10 = 1_i32 as u64;
203 let c11 = 1_i32 as f32;
204 let c12 = 1_i32 as f64;
205 let c13 = 1_i32 as *const libc::FILE;
206 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
211 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
212 let c1 = 1_u64 as isize;
213 let c2 = 1_u64 as usize;
214 let c3 = 1_u64 as i8;
215 let c4 = 1_u64 as i16;
216 let c5 = 1_u64 as i32;
217 let c6 = 1_u64 as i64;
218 let c7 = 1_u64 as u8;
219 let c8 = 1_u64 as u16;
220 let c9 = 1_u64 as u32;
221 let c10 = 1_u64 as u64;
222 let c11 = 1_u64 as f32;
223 let c12 = 1_u64 as f64;
224 let c13 = 1_u64 as *const libc::FILE;
225 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
230 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, *const libc::FILE) {
231 let c1 = 1_i64 as isize;
232 let c2 = 1_i64 as usize;
233 let c3 = 1_i64 as i8;
234 let c4 = 1_i64 as i16;
235 let c5 = 1_i64 as i32;
236 let c6 = 1_i64 as i64;
237 let c7 = 1_i64 as u8;
238 let c8 = 1_i64 as u16;
239 let c9 = 1_i64 as u32;
240 let c10 = 1_i64 as u64;
241 let c11 = 1_i64 as f32;
242 let c12 = 1_i64 as f64;
243 let c13 = 1_i64 as *const libc::FILE;
244 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13)
249 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64) {
250 let c1 = true as isize;
251 let c2 = true as usize;
253 let c4 = true as i16;
254 let c5 = true as i32;
255 let c6 = true as i64;
257 let c8 = true as u16;
258 let c9 = true as u32;
259 let c10 = true as u64;
260 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
265 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
266 let c1 = 1.0_f32 as isize;
267 let c2 = 1.0_f32 as usize;
268 let c3 = 1.0_f32 as i8;
269 let c4 = 1.0_f32 as i16;
270 let c5 = 1.0_f32 as i32;
271 let c6 = 1.0_f32 as i64;
272 let c7 = 1.0_f32 as u8;
273 let c8 = 1.0_f32 as u16;
274 let c9 = 1.0_f32 as u32;
275 let c10 = 1.0_f32 as u64;
276 let c11 = 1.0_f32 as f32;
277 let c12 = 1.0_f32 as f64;
278 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
283 -> (isize, usize, i8, i16, i32, i64, u8, u16, u32, u64, f32, f64) {
284 let c1 = 1.0f64 as isize;
285 let c2 = 1.0f64 as usize;
286 let c3 = 1.0f64 as i8;
287 let c4 = 1.0f64 as i16;
288 let c5 = 1.0f64 as i32;
289 let c6 = 1.0f64 as i64;
290 let c7 = 1.0f64 as u8;
291 let c8 = 1.0f64 as u16;
292 let c9 = 1.0f64 as u32;
293 let c10 = 1.0f64 as u64;
294 let c11 = 1.0f64 as f32;
295 let c12 = 1.0f64 as f64;
296 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)
301 -> (*const u8, *const isize, *const u8, *const u8) {
302 let c1 = func as *const u8;
303 let c2 = c1 as *const isize;
306 let _ = r as *const u32;
308 // fat-ptr -> fat-ptr -> fat-raw-ptr -> thin-ptr
309 let c3 = STR as &str as *const str as *const u8;
311 let c4 = BSTR as *const [u8] as *const [u16] as *const u8;
315 pub fn assert_eq_13(l: (isize, usize, i8, i16, i32, i64, u8,
316 u16, u32, u64, f32, f64, *const libc::FILE),
317 r: (isize, usize, i8, i16, i32, i64, u8,
318 u16, u32, u64, f32, f64, *const libc::FILE)) -> bool {
319 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = l;
320 let (r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13) = r;
321 l1 == r1 && l2 == r2 && l3 == r3 && l4 == r4 && l5 == r5 && l6 == r6 && l7 == r7 &&
322 l8 == r8 && l9 == r9 && l10 == r10 && l11 == r11 && l12 == r12 && l13 == r13
327 let f = 1_usize as *const libc::FILE;
328 let t13 = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.0, 1.0, f);
329 let t12 = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.0, 1.0);
330 assert_eq_13(from_1(), t13);
331 assert_eq_13(from_1usize(), t13);
332 assert_eq_13(from_1isize(), t13);
333 assert_eq_13(from_1u8(), t13);
334 assert_eq_13(from_1i8(), t13);
335 assert_eq_13(from_1u16(), t13);
336 assert_eq_13(from_1i16(), t13);
337 assert_eq_13(from_1u32(), t13);
338 assert_eq_13(from_1i32(), t13);
339 assert_eq_13(from_1u64(), t13);
340 assert_eq_13(from_1i64(), t13);
341 assert_eq!(from_1f32(), t12);
342 assert_eq!(from_1f64(), t12);
344 assert_eq!(from_ptr(), (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 as *const ()));
345 assert_eq!(from_bool(), (1, 1, 1, 1, 1, 1, 1, 1, 1, 1));
347 assert_eq!(other_casts(), (func as *const u8, func as *const isize,
348 STR as *const str as *const u8, BSTR as *const [u8] as *const u8));