rust/compiler/rustc_typeck
bors 178bd9130e Auto merge of #82878 - sexxi-goose:repr_packed, r=nikomatsakis
2229: Handle capturing a reference into a repr packed struct

RFC 1240 states that it is unsafe to capture references into a
packed-struct. This PR ensures that when a closure captures a precise
path, we aren't violating this safety constraint.

To acheive so we restrict the capture precision to the struct itself.

An interesting edge case where we decided to restrict precision:
```rust
struct Foo(String);

let foo: Foo;
let c = || {
    println!("{}", foo.0);
    let x = foo.0;
}
```

Given how closures get desugared today, foo.0 will be moved into the
closure, making the `println!`, safe. However this can be very subtle
and also will be unsafe if the closure gets inline.

Closes: https://github.com/rust-lang/project-rfc-2229/issues/33

r? `@nikomatsakis`
2021-03-13 09:47:07 +00:00
..
src Auto merge of #82878 - sexxi-goose:repr_packed, r=nikomatsakis 2021-03-13 09:47:07 +00:00
Cargo.toml bumped smallvec deps 2021-02-14 18:03:11 +03:00
README.md

For high-level intro to how type checking works in rustc, see the type checking chapter of the rustc dev guide.