]> git.lizzy.rs Git - rust.git/commitdiff
Rollup merge of #98582 - oli-obk:unconstrained_opaque_type, r=estebank
authorMatthias Krüger <matthias.krueger@famsik.de>
Sat, 16 Jul 2022 20:30:47 +0000 (22:30 +0200)
committerGitHub <noreply@github.com>
Sat, 16 Jul 2022 20:30:47 +0000 (22:30 +0200)
Allow destructuring opaque types in their defining scopes

fixes #96572

Before this PR, the following code snippet failed with an incomprehensible error, and similar code just ICEd in mir borrowck.

```rust
    type T = impl Copy;
    let foo: T = (1u32, 2u32);
    let (a, b) = foo;
```

The problem was that the last line created MIR projections of the form `foo.0` and `foo.1`, but `foo`'s type is `T`, which doesn't have fields (only its hidden type does). But the pattern supplies enough type information (a tuple of two different inference types) to bind a hidden type.


Trivial merge