about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorKevin Per <kevin.per@protonmail.com>2021-02-09 08:35:58 +0000
committerKevin Per <kevin.per@protonmail.com>2021-02-09 08:35:58 +0000
commit09d5d0766eaaf0dbf1c1773af79d26f73aa65073 (patch)
tree1148baf21152958f2bc7dfe6e2eb4d277f7f0ec1 /compiler
parent921ec4b3fca17cc777766c240038d7d50ba98e0d (diff)
downloadrust-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.rs1
-rw-r--r--compiler/rustc_typeck/src/collect.rs22
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(..) => {}
     }