Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/lower.rs')
-rw-r--r--crates/hir-ty/src/lower.rs22
1 files changed, 14 insertions, 8 deletions
diff --git a/crates/hir-ty/src/lower.rs b/crates/hir-ty/src/lower.rs
index 71a7db6559..335aff2c1d 100644
--- a/crates/hir-ty/src/lower.rs
+++ b/crates/hir-ty/src/lower.rs
@@ -537,8 +537,11 @@ impl<'db, 'a> TyLoweringContext<'db, 'a> {
let args = GenericArgs::identity_for_item(self.interner, opaque_ty_id);
Ty::new_alias(
self.interner,
- AliasTyKind::Opaque,
- AliasTy::new_from_args(self.interner, opaque_ty_id, args),
+ AliasTy::new_from_args(
+ self.interner,
+ AliasTyKind::Opaque { def_id: opaque_ty_id },
+ args,
+ ),
)
}
ImplTraitLoweringMode::Disallowed => {
@@ -1039,8 +1042,7 @@ impl<'db, 'a> TyLoweringContext<'db, 'a> {
let args = GenericArgs::identity_for_item(interner, def_id);
let self_ty = Ty::new_alias(
self.interner,
- rustc_type_ir::AliasTyKind::Opaque,
- AliasTy::new_from_args(interner, def_id, args),
+ AliasTy::new_from_args(interner, rustc_type_ir::Opaque { def_id }, args),
);
let (predicates, assoc_ty_bounds_start) =
self.with_shifted_in(DebruijnIndex::from_u32(1), |ctx| {
@@ -1869,10 +1871,14 @@ fn resolve_type_param_assoc_type_shorthand(
.skip_binder();
let args = EarlyBinder::bind(args).instantiate(interner, bounded_trait_ref.args);
let current_result = StoredEarlyBinder::bind((assoc_type, args.store()));
- if let Some(this_trait_resolution) = this_trait_resolution {
- return AssocTypeShorthandResolution::Ambiguous {
- sub_trait_resolution: Some(this_trait_resolution),
- };
+ if let Some(this_trait_resolution) = &this_trait_resolution {
+ if *this_trait_resolution == current_result {
+ continue;
+ } else {
+ return AssocTypeShorthandResolution::Ambiguous {
+ sub_trait_resolution: Some(this_trait_resolution.clone()),
+ };
+ }
} else if let Some(prev_resolution) = &supertraits_resolution {
if let AssocTypeShorthandResolution::Ambiguous {
sub_trait_resolution: Some(prev_resolution),