mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 03:38:29 +00:00
Rollup merge of #107401 - lenko-d:remove_the_usize_field_from_CandidateSource_AliasBound, r=compiler-errors
remove the usize field from CandidateSource::AliasBound Fixes [#107380](https://github.com/rust-lang/rust/issues/107380)
This commit is contained in:
commit
70fc114ccc
@ -78,7 +78,7 @@ pub(super) enum CandidateSource {
|
|||||||
/// let _y = x.clone();
|
/// let _y = x.clone();
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
AliasBound(usize),
|
AliasBound,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) trait GoalKind<'tcx>: TypeFoldable<'tcx> + Copy + Eq {
|
pub(super) trait GoalKind<'tcx>: TypeFoldable<'tcx> + Copy + Eq {
|
||||||
@ -242,8 +242,6 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
|||||||
// NOTE: Alternatively we could call `evaluate_goal` here and only have a `Normalized` candidate.
|
// NOTE: Alternatively we could call `evaluate_goal` here and only have a `Normalized` candidate.
|
||||||
// This doesn't work as long as we use `CandidateSource` in winnowing.
|
// This doesn't work as long as we use `CandidateSource` in winnowing.
|
||||||
let goal = goal.with(tcx, goal.predicate.with_self_ty(tcx, normalized_ty));
|
let goal = goal.with(tcx, goal.predicate.with_self_ty(tcx, normalized_ty));
|
||||||
// FIXME: This is broken if we care about the `usize` of `AliasBound` because the self type
|
|
||||||
// could be normalized to yet another projection with different item bounds.
|
|
||||||
let normalized_candidates = self.assemble_and_evaluate_candidates(goal);
|
let normalized_candidates = self.assemble_and_evaluate_candidates(goal);
|
||||||
for mut normalized_candidate in normalized_candidates {
|
for mut normalized_candidate in normalized_candidates {
|
||||||
normalized_candidate.result =
|
normalized_candidate.result =
|
||||||
@ -368,15 +366,14 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
|||||||
ty::Alias(_, alias_ty) => alias_ty,
|
ty::Alias(_, alias_ty) => alias_ty,
|
||||||
};
|
};
|
||||||
|
|
||||||
for (i, (assumption, _)) in self
|
for (assumption, _) in self
|
||||||
.tcx()
|
.tcx()
|
||||||
.bound_explicit_item_bounds(alias_ty.def_id)
|
.bound_explicit_item_bounds(alias_ty.def_id)
|
||||||
.subst_iter_copied(self.tcx(), alias_ty.substs)
|
.subst_iter_copied(self.tcx(), alias_ty.substs)
|
||||||
.enumerate()
|
|
||||||
{
|
{
|
||||||
match G::consider_assumption(self, goal, assumption) {
|
match G::consider_assumption(self, goal, assumption) {
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
candidates.push(Candidate { source: CandidateSource::AliasBound(i), result })
|
candidates.push(Candidate { source: CandidateSource::AliasBound, result })
|
||||||
}
|
}
|
||||||
Err(NoSolution) => (),
|
Err(NoSolution) => (),
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
|||||||
(CandidateSource::Impl(_), _)
|
(CandidateSource::Impl(_), _)
|
||||||
| (CandidateSource::ParamEnv(_), _)
|
| (CandidateSource::ParamEnv(_), _)
|
||||||
| (CandidateSource::BuiltinImpl, _)
|
| (CandidateSource::BuiltinImpl, _)
|
||||||
| (CandidateSource::AliasBound(_), _) => unimplemented!(),
|
| (CandidateSource::AliasBound, _) => unimplemented!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ impl<'tcx> EvalCtxt<'_, 'tcx> {
|
|||||||
match (candidate.source, other.source) {
|
match (candidate.source, other.source) {
|
||||||
(CandidateSource::Impl(_), _)
|
(CandidateSource::Impl(_), _)
|
||||||
| (CandidateSource::ParamEnv(_), _)
|
| (CandidateSource::ParamEnv(_), _)
|
||||||
| (CandidateSource::AliasBound(_), _)
|
| (CandidateSource::AliasBound, _)
|
||||||
| (CandidateSource::BuiltinImpl, _) => unimplemented!(),
|
| (CandidateSource::BuiltinImpl, _) => unimplemented!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user