Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/lower/path.rs')
-rw-r--r--crates/hir-ty/src/lower/path.rs33
1 files changed, 20 insertions, 13 deletions
diff --git a/crates/hir-ty/src/lower/path.rs b/crates/hir-ty/src/lower/path.rs
index bf37e1faa8..dfa8873b86 100644
--- a/crates/hir-ty/src/lower/path.rs
+++ b/crates/hir-ty/src/lower/path.rs
@@ -34,8 +34,8 @@ use crate::{
LifetimeElisionKind, PathDiagnosticCallbackData, const_param_ty,
},
next_solver::{
- Binder, Clause, Const, DbInterner, EarlyBinder, ErrorGuaranteed, GenericArg, GenericArgs,
- Predicate, ProjectionPredicate, Region, TraitRef, Ty,
+ AliasTermKind, Binder, Clause, Const, DbInterner, EarlyBinder, ErrorGuaranteed, GenericArg,
+ GenericArgs, Predicate, ProjectionPredicate, Region, TraitRef, Ty,
},
};
@@ -498,7 +498,7 @@ impl<'a, 'b, 'db> PathLoweringContext<'a, 'b, 'db> {
let Some(impl_trait) = db.impl_trait(impl_) else {
return error_ty();
};
- let impl_trait = impl_trait.instantiate_identity();
+ let impl_trait = impl_trait.instantiate_identity().skip_norm_wip();
// Searching for `Self::Assoc` in `impl Trait for Type` is like searching for `Self::Assoc` in `Trait`.
let AssocTypeShorthandResolution::Resolved(assoc_type) =
super::resolve_type_param_assoc_type_shorthand(
@@ -514,7 +514,12 @@ impl<'a, 'b, 'db> PathLoweringContext<'a, 'b, 'db> {
let (assoc_type, trait_args) = assoc_type
.get_with(|(assoc_type, trait_args)| (*assoc_type, trait_args.as_ref()))
.skip_binder();
- (assoc_type, EarlyBinder::bind(trait_args).instantiate(interner, impl_trait.args))
+ (
+ assoc_type,
+ EarlyBinder::bind(trait_args)
+ .instantiate(interner, impl_trait.args)
+ .skip_norm_wip(),
+ )
}
_ => return error_ty(),
};
@@ -543,7 +548,7 @@ impl<'a, 'b, 'db> PathLoweringContext<'a, 'b, 'db> {
};
let args = self.substs_from_path_segment(generic_def, infer_args, None, false);
let ty = ty_query(self.ctx.db, typeable);
- ty.instantiate(self.ctx.interner, args)
+ ty.instantiate(self.ctx.interner, args).skip_norm_wip()
}
/// Collect generic arguments from a path into a `Substs`. See also
@@ -749,12 +754,11 @@ impl<'a, 'b, 'db> PathLoweringContext<'a, 'b, 'db> {
infer_args: bool,
preceding_args: &[GenericArg<'db>],
) -> GenericArg<'db> {
- let default =
- || {
- self.ctx.ctx.db.generic_defaults(def).get(preceding_args.len()).map(
- |default| default.instantiate(self.ctx.ctx.interner, preceding_args),
- )
- };
+ let default = || {
+ self.ctx.ctx.db.generic_defaults(def).get(preceding_args.len()).map(|default| {
+ default.instantiate(self.ctx.ctx.interner, preceding_args).skip_norm_wip()
+ })
+ };
match param {
GenericParamDataRef::LifetimeParamData(_) => {
Region::new(self.ctx.ctx.interner, rustc_type_ir::ReError(ErrorGuaranteed))
@@ -902,8 +906,11 @@ impl<'a, 'b, 'db> PathLoweringContext<'a, 'b, 'db> {
interner,
super_trait_args.iter().chain(args.iter().skip(super_trait_args.len())),
);
- let projection_term =
- AliasTerm::new_from_args(interner, associated_ty.into(), args);
+ let projection_term = AliasTerm::new_from_args(
+ interner,
+ AliasTermKind::ProjectionTy { def_id: associated_ty.into() },
+ args,
+ );
let mut predicates: SmallVec<[_; 1]> = SmallVec::with_capacity(
binding.type_ref.as_ref().map_or(0, |_| 1) + binding.bounds.len(),
);