about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs22
1 files changed, 15 insertions, 7 deletions
diff --git a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
index cb074261cde..1109b11d2a7 100644
--- a/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
+++ b/compiler/rustc_trait_selection/src/error_reporting/traits/fulfillment_errors.rs
@@ -1750,6 +1750,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
             {
                 span.push_span_label(sp, label);
             }
+            let mut points_at_type = false;
             if let Some(found_type) = found_type {
                 span.push_span_label(
                     self.tcx.def_span(found_type),
@@ -1772,6 +1773,7 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
                             candidate_span,
                             "this type implements the required trait",
                         );
+                        points_at_type = true;
                     }
                 }
             }
@@ -1783,14 +1785,20 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
                 StringPart::highlighted(format!("{crate_name}")),
                 StringPart::normal("` in the dependency graph\n".to_string()),
             ]);
-            err.highlighted_note(vec![
-                StringPart::normal(
-                    "two types coming from two different versions of the same crate are \
+            if points_at_type {
+                // We only clarify that the same type from different crate versions are not the
+                // same when we *find* the same type coming from different crate versions, otherwise
+                // it could be that it was a type provided by a different crate than the one that
+                // provides the trait, and mentioning this adds verbosity without clarification.
+                err.highlighted_note(vec![
+                    StringPart::normal(
+                        "two types coming from two different versions of the same crate are \
                          different types "
-                        .to_string(),
-                ),
-                StringPart::highlighted("even if they look the same".to_string()),
-            ]);
+                            .to_string(),
+                    ),
+                    StringPart::highlighted("even if they look the same".to_string()),
+                ]);
+            }
             err.highlighted_help(vec![
                 StringPart::normal("you can use `".to_string()),
                 StringPart::highlighted("cargo tree".to_string()),