don't normalize in astconv
We delay projection normalization to further stages in order to register user type annotations before normalization in HIR typeck. There are two consumers of astconv: ItemCtxt and FnCtxt. The former already expects unnormalized types from astconv, see its AstConv trait impl. The latter needs `RawTy` for a cleaner interface. Unfortunately astconv still needs the normalization machinery in order to resolve enum variants that have projections in the self type, e.g. `<<T as Trait>::Assoc>::StructVariant {}`. This is why `AstConv::normalize_ty_2` is necessary.
This commit is contained in:
parent
93bf84c902
commit
d227506683
25 changed files with 376 additions and 257 deletions
|
@ -91,6 +91,7 @@ pub fn type_op_ascribe_user_type_with_span<'tcx>(
|
|||
}
|
||||
|
||||
if let Some(UserSelfTy { impl_def_id, self_ty }) = user_self_ty {
|
||||
let self_ty = ocx.normalize(&cause, param_env, self_ty);
|
||||
let impl_self_ty = tcx.bound_type_of(impl_def_id).subst(tcx, substs);
|
||||
let impl_self_ty = ocx.normalize(&cause, param_env, impl_self_ty);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue