// edition:2021 // Given how the closure desugaring is implemented (at least at the time of writing this test), // we don't need to truncate the captured path to a reference into a packed-struct if the field // being referenced will be moved into the closure, since it's safe to move out a field from a // packed-struct. // // However to avoid surprises for the user, or issues when the closure is // inlined we will truncate the capture to access just the struct regardless of if the field // might get moved into the closure. // // It is possible for someone to try writing the code that relies on the desugaring to create a ref // into a packed-struct. Here we test that the compiler still detects that case. fn test_missing_unsafe_warning_on_repr_packed() { #[repr(packed)] struct Foo { x: String } let foo = Foo { x: String::new() }; let c = || { println!("{}", foo.x); //~^ ERROR: reference to packed field is unaligned let _z = foo.x; }; c(); } fn main() { test_missing_unsafe_warning_on_repr_packed(); }