about summary refs log tree commit diff
path: root/src/librustc_middle
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2020-05-12 10:56:26 -0700
committerEsteban Küber <esteban@kuber.com.ar>2020-05-12 10:56:26 -0700
commita3f30bbc2d28572f9fa429cf3b31d7f95d3b0dda (patch)
treea2351c62ef4b8e951b03358a36a6e005e502d88c /src/librustc_middle
parentd903a9def4c29846ec6215ccc7fa76d39428f577 (diff)
downloadrust-a3f30bbc2d28572f9fa429cf3b31d7f95d3b0dda.tar.gz
rust-a3f30bbc2d28572f9fa429cf3b31d7f95d3b0dda.zip
Don't `type_of` on trait assoc ty without default
Fix #72076.
Diffstat (limited to 'src/librustc_middle')
-rw-r--r--src/librustc_middle/ty/error.rs13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/librustc_middle/ty/error.rs b/src/librustc_middle/ty/error.rs
index f3b6a53dfeb..00be12f46fe 100644
--- a/src/librustc_middle/ty/error.rs
+++ b/src/librustc_middle/ty/error.rs
@@ -817,19 +817,18 @@ fn foo(&self) -> Self::T { String::new() }
                 for item in &items[..] {
                     match item.kind {
                         hir::AssocItemKind::Type | hir::AssocItemKind::OpaqueTy => {
-                            if self.type_of(self.hir().local_def_id(item.id.hir_id)) == found {
-                                if let hir::Defaultness::Default { has_value: true } =
-                                    item.defaultness
-                                {
+                            // FIXME: account for returning some type in a trait fn impl that has
+                            // an assoc type as a return type (#72076).
+                            if let hir::Defaultness::Default { has_value: true } = item.defaultness
+                            {
+                                if self.type_of(self.hir().local_def_id(item.id.hir_id)) == found {
                                     db.span_label(
                                         item.span,
                                         "associated type defaults can't be assumed inside the \
                                             trait defining them",
                                     );
-                                } else {
-                                    db.span_label(item.span, "expected this associated type");
+                                    return true;
                                 }
-                                return true;
                             }
                         }
                         _ => {}