rust/tests/ui/impl-trait
Matthias Krüger 692d764e53
Rollup merge of #114267 - compiler-errors:rpitit-opaque-bounds, r=spastorino
Map RPITIT's opaque type bounds back from projections to opaques

An RPITIT in a program's AST is eventually translated into both a projection GAT and an opaque. The opaque is used for default trait methods, like:

```
trait Foo {
  fn bar() -> impl Sized { 0i32 }
}
```

The item bounds for both the projection and opaque are identical, and both have a *projection* self ty. This is mostly okay, since we can normalize this projection within the default trait method body to the opaque, but it does two things:
1. it leads to bugs in places where we don't normalize item bounds, like `deduce_future_output_from_obligations`
2. it leads to extra match arms that are both suspicious looking and also easy to miss

This PR maps the opaque type bounds of the RPITIT's *opaque* back to the opaque's self type to avoid this quirk. Then we can fix the UI test for #108304 (1.) and also remove a bunch of match arms (2.).

Fixes #108304

r? `@spastorino`
2023-07-31 16:57:55 +02:00
..
2023-07-06 11:37:19 +02:00
2023-01-15 19:46:20 +00:00
2023-04-20 15:06:17 -03:00
2023-07-03 21:40:04 +00:00
2023-04-16 09:58:08 +00:00
2023-04-16 09:58:08 +00:00
2023-02-22 21:52:26 +00:00
2023-06-27 21:36:15 +00:00
2023-06-26 19:14:49 +00:00
2023-04-25 19:53:09 +00:00