diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-04-28 13:12:09 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-28 13:12:09 +0200 |
| commit | d9c1f5cf4f761455024fc7b9dd586b1a669bcb0f (patch) | |
| tree | 4352b7c8ce84447a51cfced6b5a22f4f157e2a34 | |
| parent | fb5615a4771ea3d54256f969dc84d2dfd38d812c (diff) | |
| parent | 432ab343f8c75e657d25713addc2ee0cd5110542 (diff) | |
| download | rust-d9c1f5cf4f761455024fc7b9dd586b1a669bcb0f.tar.gz rust-d9c1f5cf4f761455024fc7b9dd586b1a669bcb0f.zip | |
Rollup merge of #71311 - estebank:fn-type-param, r=varkor
On `FnDef` type annotation suggestion, use fn-pointer output Address the last point in #71209.
3 files changed, 23 insertions, 1 deletions
diff --git a/src/librustc_infer/infer/error_reporting/need_type_info.rs b/src/librustc_infer/infer/error_reporting/need_type_info.rs index 1986838e401..93c8e505697 100644 --- a/src/librustc_infer/infer/error_reporting/need_type_info.rs +++ b/src/librustc_infer/infer/error_reporting/need_type_info.rs @@ -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 }; diff --git a/src/test/ui/suggestions/fn-needing-specified-return-type-param.rs b/src/test/ui/suggestions/fn-needing-specified-return-type-param.rs new file mode 100644 index 00000000000..2f140f823af --- /dev/null +++ b/src/test/ui/suggestions/fn-needing-specified-return-type-param.rs @@ -0,0 +1,5 @@ +fn f<A>() -> A { unimplemented!() } +fn foo() { + let _ = f; //~ ERROR type annotations needed for `fn() -> A` +} +fn main() {} diff --git a/src/test/ui/suggestions/fn-needing-specified-return-type-param.stderr b/src/test/ui/suggestions/fn-needing-specified-return-type-param.stderr new file mode 100644 index 00000000000..b59a3818e70 --- /dev/null +++ b/src/test/ui/suggestions/fn-needing-specified-return-type-param.stderr @@ -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`. |
