Skip to content

Commit

Permalink
Add regression test
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Jun 11, 2024
1 parent aec67e2 commit fe55c00
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
18 changes: 18 additions & 0 deletions tests/ui/impl-trait/recursive-bound-eval.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
pub trait Parser<E> {
fn parse(&self) -> E;
}

impl<E, T: Fn() -> E> Parser<E> for T {
fn parse(&self) -> E {
self()
}
}

pub fn recursive_fn<E>() -> impl Parser<E> {
//~^ ERROR: cycle detected
move || recursive_fn().parse()
//~^ ERROR: type annotations needed
//~| ERROR: no method named `parse` found for opaque type
}

fn main() {}
42 changes: 42 additions & 0 deletions tests/ui/impl-trait/recursive-bound-eval.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
error[E0282]: type annotations needed
--> $DIR/recursive-bound-eval.rs:13:28
|
LL | move || recursive_fn().parse()
| ^^^^^ cannot infer type

error[E0599]: no method named `parse` found for opaque type `impl Parser<_>` in the current scope
--> $DIR/recursive-bound-eval.rs:13:28
|
LL | move || recursive_fn().parse()
| ^^^^^ method not found in `impl Parser<_>`
|
= help: items from traits can only be used if the trait is implemented and in scope
help: trait `Parser` which provides `parse` is implemented but not in scope; perhaps you want to import it
|
LL + use Parser;
|

error[E0391]: cycle detected when computing type of opaque `recursive_fn::{opaque#0}`
--> $DIR/recursive-bound-eval.rs:11:29
|
LL | pub fn recursive_fn<E>() -> impl Parser<E> {
| ^^^^^^^^^^^^^^
|
note: ...which requires type-checking `recursive_fn`...
--> $DIR/recursive-bound-eval.rs:13:13
|
LL | move || recursive_fn().parse()
| ^^^^^^^^^^^^^^
= note: ...which requires evaluating trait selection obligation `recursive_fn::{opaque#0}: core::marker::Unpin`...
= note: ...which again requires computing type of opaque `recursive_fn::{opaque#0}`, completing the cycle
note: cycle used when computing type of `recursive_fn::{opaque#0}`
--> $DIR/recursive-bound-eval.rs:11:29
|
LL | pub fn recursive_fn<E>() -> impl Parser<E> {
| ^^^^^^^^^^^^^^
= note: see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0282, E0391, E0599.
For more information about an error, try `rustc --explain E0282`.

0 comments on commit fe55c00

Please sign in to comment.