diff options
| author | Kevin Per <kevin.per@protonmail.com> | 2021-02-09 08:35:58 +0000 |
|---|---|---|
| committer | Kevin Per <kevin.per@protonmail.com> | 2021-02-09 08:35:58 +0000 |
| commit | 09d5d0766eaaf0dbf1c1773af79d26f73aa65073 (patch) | |
| tree | 1148baf21152958f2bc7dfe6e2eb4d277f7f0ec1 /compiler | |
| parent | 921ec4b3fca17cc777766c240038d7d50ba98e0d (diff) | |
| download | rust-09d5d0766eaaf0dbf1c1773af79d26f73aa65073.tar.gz rust-09d5d0766eaaf0dbf1c1773af79d26f73aa65073.zip | |
Fixing bad suggestion for `_` in `const` type when a function #81885
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_typeck/src/astconv/mod.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_typeck/src/collect.rs | 22 |
2 files changed, 17 insertions, 6 deletions
diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index 5659345f0ff..877c7631c9b 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -2327,6 +2327,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { &generics.params[..], visitor.0, true, + true ); } diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index b1d98d75196..3d0220bfd67 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -141,6 +141,7 @@ crate fn placeholder_type_error( generics: &[hir::GenericParam<'_>], placeholder_types: Vec<Span>, suggest: bool, + is_fn: bool, ) { if placeholder_types.is_empty() { return; @@ -171,7 +172,9 @@ crate fn placeholder_type_error( } let mut err = bad_placeholder_type(tcx, placeholder_types); - if suggest { + + // Suggest, but only if it is not a function + if suggest && !is_fn { err.multipart_suggestion( "use type parameters instead", sugg, @@ -198,7 +201,14 @@ fn reject_placeholder_type_signatures_in_item(tcx: TyCtxt<'tcx>, item: &'tcx hir let mut visitor = PlaceholderHirTyCollector::default(); visitor.visit_item(item); - placeholder_type_error(tcx, Some(generics.span), &generics.params[..], visitor.0, suggest); + placeholder_type_error( + tcx, + Some(generics.span), + &generics.params[..], + visitor.0, + suggest, + false + ); } impl Visitor<'tcx> for CollectItemTypesVisitor<'tcx> { @@ -743,7 +753,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) { // Account for `const C: _;`. let mut visitor = PlaceholderHirTyCollector::default(); visitor.visit_trait_item(trait_item); - placeholder_type_error(tcx, None, &[], visitor.0, false); + placeholder_type_error(tcx, None, &[], visitor.0, false, false); } hir::TraitItemKind::Type(_, Some(_)) => { @@ -752,7 +762,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) { // Account for `type T = _;`. let mut visitor = PlaceholderHirTyCollector::default(); visitor.visit_trait_item(trait_item); - placeholder_type_error(tcx, None, &[], visitor.0, false); + placeholder_type_error(tcx, None, &[], visitor.0, false, false); } hir::TraitItemKind::Type(_, None) => { @@ -761,7 +771,7 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) { // even if there is no concrete type. let mut visitor = PlaceholderHirTyCollector::default(); visitor.visit_trait_item(trait_item); - placeholder_type_error(tcx, None, &[], visitor.0, false); + placeholder_type_error(tcx, None, &[], visitor.0, false, false); } }; @@ -782,7 +792,7 @@ fn convert_impl_item(tcx: TyCtxt<'_>, impl_item_id: hir::HirId) { // Account for `type T = _;` let mut visitor = PlaceholderHirTyCollector::default(); visitor.visit_impl_item(impl_item); - placeholder_type_error(tcx, None, &[], visitor.0, false); + placeholder_type_error(tcx, None, &[], visitor.0, false, false); } hir::ImplItemKind::Const(..) => {} } |
