mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-10 22:13:27 +00:00
Add regression test
This commit is contained in:
parent
3cce66c544
commit
4f6e27d4cf
28
src/test/ui/impl-trait/nested-return-type2.rs
Normal file
28
src/test/ui/impl-trait/nested-return-type2.rs
Normal file
@ -0,0 +1,28 @@
|
||||
trait Duh {}
|
||||
|
||||
impl Duh for i32 {}
|
||||
|
||||
trait Trait {
|
||||
type Assoc: Duh;
|
||||
}
|
||||
|
||||
// the fact that `R` is the `::Output` projection on `F` causes
|
||||
// an intermediate inference var to be generated which is then later
|
||||
// compared against the actually found `Assoc` type.
|
||||
impl<R: Duh, F: FnMut() -> R> Trait for F {
|
||||
type Assoc = R;
|
||||
}
|
||||
|
||||
// The `impl Send` here is then later compared against the inference var
|
||||
// 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.
|
||||
fn foo() -> impl Trait<Assoc = impl Send> {
|
||||
//~^ ERROR `impl Send: Duh` is not satisfied
|
||||
//~| ERROR `impl Send: Duh` is not satisfied
|
||||
|| 42
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
32
src/test/ui/impl-trait/nested-return-type2.stderr
Normal file
32
src/test/ui/impl-trait/nested-return-type2.stderr
Normal file
@ -0,0 +1,32 @@
|
||||
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`.
|
Loading…
Reference in New Issue
Block a user