Add regression test

(cherry picked from commit fe55c0091d)
This commit is contained in:
Oli Scherer 2024-06-11 06:49:05 +00:00 committed by Josh Stone
parent f0a3643af1
commit 11495decd5
2 changed files with 60 additions and 0 deletions

View File

@ -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() {}

View File

@ -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`.