Also use the RPIT back compat hack in trait projection

This commit is contained in:
Oli Scherer 2022-02-23 13:34:39 +00:00
parent dc35d584a9
commit 360edd611d
4 changed files with 29 additions and 43 deletions

View file

@ -1,3 +1,5 @@
// check-pass
trait Duh {}
impl Duh for i32 {}
@ -17,10 +19,10 @@ impl<R: Duh, F: FnMut() -> R> Trait for F {
// created, causing the inference var to be set to `impl Send` instead of
// the hidden type. We already have obligations registered on the inference
// var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
// type does not implement `Duh`, even if its hidden type does. So we error out.
// type does not implement `Duh`, even if its hidden type does.
// Lazy TAIT would error out, but we inserted a hack to make it work again,
// keeping backwards compatibility.
fn foo() -> impl Trait<Assoc = impl Send> {
//~^ ERROR `impl Send: Duh` is not satisfied
//~| ERROR `impl Send: Duh` is not satisfied
|| 42
}

View file

@ -1,32 +0,0 @@
error[E0277]: the trait bound `impl Send: Duh` is not satisfied
--> $DIR/nested-return-type2.rs:21:13
|
LL | fn foo() -> impl Trait<Assoc = impl Send> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Duh` is not implemented for `impl Send`
|
note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2.rs:24:5: 24:10]`
--> $DIR/nested-return-type2.rs:12:31
|
LL | impl<R: Duh, F: FnMut() -> R> Trait for F {
| ^^^^^ ^
error[E0277]: the trait bound `impl Send: Duh` is not satisfied
--> $DIR/nested-return-type2.rs:21:43
|
LL | fn foo() -> impl Trait<Assoc = impl Send> {
| ___________________________________________^
LL | |
LL | |
LL | | || 42
LL | | }
| |_^ the trait `Duh` is not implemented for `impl Send`
|
note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2.rs:24:5: 24:10]`
--> $DIR/nested-return-type2.rs:12:31
|
LL | impl<R: Duh, F: FnMut() -> R> Trait for F {
| ^^^^^ ^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0277`.