diff options
| author | bors <bors@rust-lang.org> | 2023-05-13 19:03:33 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-05-13 19:03:33 +0000 |
| commit | 2c41369acc445d04129db40ba998dd7a89fb0d2e (patch) | |
| tree | 85fa46eb6a03f3a01b5b7d6ecd156b1090929ac0 /tests/ui/unsized-locals | |
| parent | 1623978dc41701201ec4daf36b3f748d661e7194 (diff) | |
| parent | 83a5a69a4c7bd60901bf7f7d96378ddea7ecb06c (diff) | |
| download | rust-2c41369acc445d04129db40ba998dd7a89fb0d2e.tar.gz rust-2c41369acc445d04129db40ba998dd7a89fb0d2e.zip | |
Auto merge of #111374 - tmiasko:align-unsized-locals, r=cjgillot
Align unsized locals Allocate an extra space for unsized locals and manually align the storage, since alloca doesn't support dynamic alignment. Fixes #71416. Fixes #71695.
Diffstat (limited to 'tests/ui/unsized-locals')
| -rw-r--r-- | tests/ui/unsized-locals/align.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/ui/unsized-locals/align.rs b/tests/ui/unsized-locals/align.rs new file mode 100644 index 00000000000..01be8f3bb9c --- /dev/null +++ b/tests/ui/unsized-locals/align.rs @@ -0,0 +1,30 @@ +// Test that unsized locals uphold alignment requirements. +// Regression test for #71416. +// run-pass +#![feature(unsized_locals)] +#![allow(incomplete_features)] +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(); + let dwncst = x.downcast_ref::<A>().unwrap(); + let addr = dwncst.f(); + assert_eq!(addr as usize % 256, 0); +} |
