Explicitly compare TypesMap as ptrs

This commit is contained in:
Shoyu Vanilla 2025-02-20 08:49:00 +09:00
parent 9d459e8de7
commit a82773ab48

View File

@ -10,7 +10,7 @@ use hir_def::{
generics::{TypeParamProvenance, WherePredicate, WherePredicateTypeTarget}, generics::{TypeParamProvenance, WherePredicate, WherePredicateTypeTarget},
path::{GenericArg, GenericArgs, Path, PathSegment, PathSegments}, path::{GenericArg, GenericArgs, Path, PathSegment, PathSegments},
resolver::{ResolveValueResult, TypeNs, ValueNs}, resolver::{ResolveValueResult, TypeNs, ValueNs},
type_ref::{TypeBound, TypeRef}, type_ref::{TypeBound, TypeRef, TypesMap},
GenericDefId, GenericParamId, ItemContainerId, Lookup, TraitId, GenericDefId, GenericParamId, ItemContainerId, Lookup, TraitId,
}; };
use smallvec::SmallVec; use smallvec::SmallVec;
@ -837,17 +837,22 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> {
} }
(_, ImplTraitLoweringMode::Param | ImplTraitLoweringMode::Variable) => { (_, ImplTraitLoweringMode::Param | ImplTraitLoweringMode::Variable) => {
// Find the generic index for the target of our `bound` // Find the generic index for the target of our `bound`
let target_param_idx = self let target_param_idx =
.ctx self.ctx.resolver.where_predicates_in_scope().find_map(
.resolver |(p, (_, types_map))| match p {
.where_predicates_in_scope()
.find_map(|(p, (_, types_map))| match p {
WherePredicate::TypeBound { WherePredicate::TypeBound {
target: WherePredicateTypeTarget::TypeOrConstParam(idx), target: WherePredicateTypeTarget::TypeOrConstParam(idx),
bound: b, bound: b,
} if b == bound && self.ctx.types_map == types_map => Some(idx), } if std::ptr::eq::<TypesMap>(
self.ctx.types_map,
types_map,
) && bound == b =>
{
Some(idx)
}
_ => None, _ => None,
}); },
);
let ty = if let Some(target_param_idx) = target_param_idx { let ty = if let Some(target_param_idx) = target_param_idx {
let mut counter = 0; let mut counter = 0;
let generics = self.ctx.generics().expect("generics in scope"); let generics = self.ctx.generics().expect("generics in scope");