1 // Test DST raw pointers
4 fn foo(&self) -> isize;
11 fn foo(&self) -> isize {
16 struct Foo<T: ?Sized> {
23 let z: *const dyn Trait = &x;
24 let r = unsafe { (&*z).foo() };
28 let p = Foo { f: A { f: 42 } };
29 let o: *const Foo<dyn Trait> = &p;
30 let r = unsafe { (&*o).f.foo() };
34 let a: *const [_] = &[1, 2, 3];
42 // raw slice with explicit cast
43 let a = &[1, 2, 3] as *const [i32];
51 // raw DST struct with slice
52 let c: *const Foo<[_]> = &Foo { f: [1, 2, 3] };
56 let len = (&*c).f.len();
60 // all of the above with *mut
61 let mut x = A { f: 42 };
62 let z: *mut dyn Trait = &mut x;
63 let r = unsafe { (&*z).foo() };
66 let mut p = Foo { f: A { f: 42 } };
67 let o: *mut Foo<dyn Trait> = &mut p;
68 let r = unsafe { (&*o).f.foo() };
71 let a: *mut [_] = &mut [1, 2, 3];
79 let a = &mut [1, 2, 3] as *mut [i32];
87 let c: *mut Foo<[_]> = &mut Foo { f: [1, 2, 3] };
91 let len = (&*c).f.len();