diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index fb5c1b1953f..61a860aef85 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -2529,7 +2529,17 @@ impl<'a> Resolver<'a> { debug!("(resolving item) resolving {} ({:?})", name, item.node); match item.node { - ItemKind::Ty(_, ref generics) | + ItemKind::Ty(_, ref generics) => { + self.with_current_self_item(item, |this| { + this.with_generic_param_rib(HasGenericParams(generics, ItemRibKind), |this| { + let item_def_id = this.definitions.local_def_id(item.id); + this.with_self_rib(Def::SelfTy(Some(item_def_id), None), |this| { + visit::walk_item(this, item) + }) + }) + }); + } + ItemKind::Existential(_, ref generics) | ItemKind::Fn(_, _, ref generics, _) => { self.with_generic_param_rib( diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 72ac041d2e5..f6e3f1a99e8 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1770,7 +1770,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o { tcx.mk_ty_param(index, tcx.hir().name_by_hir_id(hir_id).as_interned_str()) } Res::SelfTy(Some(_), None) => { - // `Self` in trait. + // `Self` in trait or type alias. assert_eq!(opt_self_ty, None); self.prohibit_generics(&path.segments); tcx.mk_self_type()