4 fn eq_ref<T>(x: &T, y: &T) -> bool {
5 x as *const _ == y as *const _
12 assert_eq!(1 as *const i32 as usize, 1);
13 assert_eq!((1 as *const i32).wrapping_offset(4) as usize, 1 + 4*4);
15 // negative overflowing wrapping_offset (going through memory because
16 // this used to trigger an ICE on 32bit)
17 let val = &mut ptr::null();
18 *val = (1 as *const u8).wrapping_offset(-4);
19 assert_eq!(*val as usize, usize::max_value() - 2);
23 let mut y = &x as &_ as *const _ as usize;
26 let y = y as *const _;
27 assert!(eq_ref(&x, unsafe { &*y }));
31 let x : fn() -> i32 = f;
32 let y : *mut u8 = unsafe { mem::transmute(x as fn() -> i32) };
33 let mut y = y as usize;
36 let x : fn() -> i32 = unsafe { mem::transmute(y as *mut u8) };
40 // involving types other than usize
41 assert_eq!((-1i32) as usize as *const i32 as usize, (-1i32) as usize);