Use FnOnceOutput instead of FnOnce where expected
This commit is contained in:
parent
25b706cde3
commit
d6b99b9c92
@ -1013,7 +1013,7 @@ fn pretty_print_opaque_impl_type(
|
||||
.extend(
|
||||
// Group the return ty with its def id, if we had one.
|
||||
entry.return_ty.map(|ty| {
|
||||
(tcx.require_lang_item(LangItem::FnOnce, None), ty)
|
||||
(tcx.require_lang_item(LangItem::FnOnceOutput, None), ty)
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
21
tests/ui/impl-trait/opaque-used-in-extraneous-argument.rs
Normal file
21
tests/ui/impl-trait/opaque-used-in-extraneous-argument.rs
Normal file
@ -0,0 +1,21 @@
|
||||
//! This is a regression test to avoid an ICE in diagnostics code.
|
||||
//! A typo in the compiler used to get the DefId of FnOnce, and
|
||||
//! use it where an associated item was expected.
|
||||
|
||||
fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
//~^ ERROR missing lifetime specifier
|
||||
//~| ERROR cannot find type `P`
|
||||
//~| ERROR cannot find type `T`
|
||||
//~| ERROR `Fn`-family traits' type parameters is subject to change
|
||||
|
||||
fn open_parent<'path>() {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let old_path = frob("hello");
|
||||
//~^ ERROR function takes 0 arguments
|
||||
|
||||
open_parent(&old_path)
|
||||
//~^ ERROR function takes 0 arguments
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
error[E0106]: missing lifetime specifier
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:5:39
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
| ^^ expected named lifetime parameter
|
||||
|
|
||||
= help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
|
||||
help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + 'static {}
|
||||
| ~~~~~~~
|
||||
|
||||
error[E0412]: cannot find type `P` in this scope
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:5:22
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
| ^ not found in this scope
|
||||
|
|
||||
help: you might be missing a type parameter
|
||||
|
|
||||
LL | fn frob<P>() -> impl Fn<P, Output = T> + '_ {}
|
||||
| +++
|
||||
|
||||
error[E0412]: cannot find type `T` in this scope
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:5:34
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
| ^ not found in this scope
|
||||
|
|
||||
help: you might be missing a type parameter
|
||||
|
|
||||
LL | fn frob<T>() -> impl Fn<P, Output = T> + '_ {}
|
||||
| +++
|
||||
|
||||
error[E0658]: the precise format of `Fn`-family traits' type parameters is subject to change
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:5:19
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
| ^^^^^^^^^^^^^^^^^ help: use parenthetical notation instead: `Fn(P) -> T`
|
||||
|
|
||||
= note: see issue #29625 <https://github.com/rust-lang/rust/issues/29625> for more information
|
||||
= help: add `#![feature(unboxed_closures)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0061]: this function takes 0 arguments but 1 argument was supplied
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:16:20
|
||||
|
|
||||
LL | let old_path = frob("hello");
|
||||
| ^^^^ -------
|
||||
| |
|
||||
| unexpected argument of type `&'static str`
|
||||
| help: remove the extra argument
|
||||
|
|
||||
note: function defined here
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:5:4
|
||||
|
|
||||
LL | fn frob() -> impl Fn<P, Output = T> + '_ {}
|
||||
| ^^^^
|
||||
|
||||
error[E0061]: this function takes 0 arguments but 1 argument was supplied
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:19:5
|
||||
|
|
||||
LL | open_parent(&old_path)
|
||||
| ^^^^^^^^^^^ ---------
|
||||
| |
|
||||
| unexpected argument of type `&impl FnOnce<{type error}, Output = {type error}> + Fn<{type error}> + 'static`
|
||||
| help: remove the extra argument
|
||||
|
|
||||
note: function defined here
|
||||
--> $DIR/opaque-used-in-extraneous-argument.rs:11:4
|
||||
|
|
||||
LL | fn open_parent<'path>() {
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0061, E0106, E0412, E0658.
|
||||
For more information about an error, try `rustc --explain E0061`.
|
Loading…
Reference in New Issue
Block a user