Skip to content

Commit 08ff70e

Browse files
Handle TyAlias import differently
1 parent 9d97e80 commit 08ff70e

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

compiler/rustc_hir/src/lang_items.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ language_item_table! {
165165
DynMetadata, sym::dyn_metadata, dyn_metadata, Target::Struct, GenericRequirement::None;
166166

167167
Freeze, sym::freeze, freeze_trait, Target::Trait, GenericRequirement::Exact(0);
168-
Identity, sym::identity, identity_trait, Target::Trait, GenericRequirement::Exact(0);
168+
Identity, sym::identity, identity_type, Target::AssocTy, GenericRequirement::None;
169169

170170
Drop, sym::drop, drop_trait, Target::Trait, GenericRequirement::None;
171171
Destruct, sym::destruct, destruct_trait, Target::Trait, GenericRequirement::None;

compiler/rustc_hir_analysis/src/astconv/mod.rs

+18-5
Original file line numberDiff line numberDiff line change
@@ -2626,12 +2626,25 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
26262626
let substs = self.ast_path_substs_for_ty(span, did, item_segment.0);
26272627
tcx.mk_opaque(did, substs)
26282628
}
2629+
Res::Def(DefKind::TyAlias, def_id) => {
2630+
assert_eq!(opt_self_ty, None);
2631+
self.prohibit_generics(path.segments.split_last().unwrap().1.iter(), |_| {});
2632+
2633+
if let Some(identity_def_id) = tcx.lang_items().identity_type() {
2634+
let item_segment = path.segments.split_last().unwrap();
2635+
2636+
let substs = self.ast_path_substs_for_ty(span, def_id, item_segment.0);
2637+
let binder_ty = tcx.bound_type_of(def_id);
2638+
let ty = binder_ty.subst(tcx, substs);
2639+
2640+
let substs = tcx.mk_substs_trait(ty, []);
2641+
tcx.mk_projection(identity_def_id, substs)
2642+
} else {
2643+
self.ast_path_to_ty(span, def_id, path.segments.last().unwrap())
2644+
}
2645+
}
26292646
Res::Def(
2630-
DefKind::Enum
2631-
| DefKind::TyAlias
2632-
| DefKind::Struct
2633-
| DefKind::Union
2634-
| DefKind::ForeignTy,
2647+
DefKind::Enum | DefKind::Struct | DefKind::Union | DefKind::ForeignTy,
26352648
did,
26362649
) => {
26372650
assert_eq!(opt_self_ty, None);

0 commit comments

Comments
 (0)