| // Test that unsized locals uphold alignment requirements. | |
| // Regression test for #71416. | |
| use std::any::Any; | |
| #[repr(align(256))] | |
| #[allow(dead_code)] | |
| struct A { | |
| v: u8 | |
| } | |
| impl A { | |
| fn f(&self) -> *const A { | |
| assert_eq!(self as *const A as usize % 256, 0); | |
| self | |
| } | |
| } | |
| fn mk() -> Box<dyn Any> { | |
| Box::new(A { v: 4 }) | |
| } | |
| fn main() { | |
| let x = *mk(); //~ERROR the size for values of type `dyn Any` cannot be known at compilation time | |
| let dwncst = x.downcast_ref::<A>().unwrap(); | |
| let addr = dwncst.f(); | |
| assert_eq!(addr as usize % 256, 0); | |
| } |