about summary refs log tree commit diff
path: root/tests/ui/unsized-locals/align.rs
blob: fdb83a848bc424fe2c97b94bf0a6570667685bcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 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);
}