| trait Trait {} |
| |
| // Make sure casts between thin-pointer <-> fat pointer obey RFC401 |
| fn main() { |
| let a: &[i32] = &[1, 2, 3]; |
| let b: Box<[i32]> = Box::new([1, 2, 3]); |
| let p = a as *const [i32]; |
| let q = a.as_ptr(); |
| |
| a as usize; //~ ERROR casting |
| a as isize; //~ ERROR casting |
| a as i16; //~ ERROR casting `&[i32]` as `i16` is invalid |
| a as u32; //~ ERROR casting `&[i32]` as `u32` is invalid |
| b as usize; //~ ERROR non-primitive cast |
| p as usize; |
| //~^ ERROR casting |
| |
| // #22955 |
| q as *const [i32]; //~ ERROR cannot cast |
| |
| // #21397 |
| let t: *mut (dyn Trait + 'static) = 0 as *mut _; |
| //~^ ERROR cannot cast `usize` to a pointer that is wide |
| let mut fail: *const str = 0 as *const str; |
| //~^ ERROR cannot cast `usize` to a pointer that is wide |
| let mut fail2: *const str = 0isize as *const str; |
| //~^ ERROR cannot cast `isize` to a pointer that is wide |
| } |
| |
| fn foo<T: ?Sized>() { |
| let s = 0 as *const T; |
| //~^ ERROR cannot cast `usize` to a pointer that may be wide |
| } |