Skip to content

Commit

Permalink
Rollup merge of #71311 - estebank:fn-type-param, r=varkor
Browse files Browse the repository at this point in the history
On `FnDef` type annotation suggestion, use fn-pointer output

Address the last point in #71209.
  • Loading branch information
Dylan-DPC authored Apr 28, 2020
2 parents fb5615a + 432ab34 commit d9c1f5c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/librustc_infer/infer/error_reporting/need_type_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,13 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
None
};
printer.name_resolver = Some(Box::new(&getter));
let _ = ty.print(printer);
let _ = if let ty::FnDef(..) = ty.kind {
// We don't want the regular output for `fn`s because it includes its path in
// invalid pseduo-syntax, we want the `fn`-pointer output instead.
ty.fn_sig(self.tcx).print(printer)
} else {
ty.print(printer)
};
s
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fn f<A>() -> A { unimplemented!() }
fn foo() {
let _ = f; //~ ERROR type annotations needed for `fn() -> A`
}
fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0282]: type annotations needed for `fn() -> A`
--> $DIR/fn-needing-specified-return-type-param.rs:3:13
|
LL | let _ = f;
| - ^ cannot infer type for type parameter `A` declared on the function `f`
| |
| consider giving this pattern the explicit type `fn() -> A`, where the type parameter `A` is specified

error: aborting due to previous error

For more information about this error, try `rustc --explain E0282`.

0 comments on commit d9c1f5c

Please sign in to comment.