diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2020-05-12 10:56:26 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2020-05-12 10:56:26 -0700 |
| commit | a3f30bbc2d28572f9fa429cf3b31d7f95d3b0dda (patch) | |
| tree | a2351c62ef4b8e951b03358a36a6e005e502d88c /src/librustc_middle | |
| parent | d903a9def4c29846ec6215ccc7fa76d39428f577 (diff) | |
| download | rust-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.rs | 13 |
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; } } _ => {} |
