From 218caa410aa38c29984be31a5229b9fa717560ee Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:13 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- tests/ui/cast/fat-ptr-cast.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tests/ui/cast/fat-ptr-cast.rs (limited to 'tests/ui/cast/fat-ptr-cast.rs') diff --git a/tests/ui/cast/fat-ptr-cast.rs b/tests/ui/cast/fat-ptr-cast.rs new file mode 100644 index 000000000..b5276dc61 --- /dev/null +++ b/tests/ui/cast/fat-ptr-cast.rs @@ -0,0 +1,33 @@ +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() { + let s = 0 as *const T; + //~^ ERROR cannot cast `usize` to a pointer that may be wide +} -- cgit v1.2.3