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(
|
.extend(
|
||||||
// Group the return ty with its def id, if we had one.
|
// Group the return ty with its def id, if we had one.
|
||||||
entry.return_ty.map(|ty| {
|
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