1
Fork 0

Structurally normalize weak and inherent too

This commit is contained in:
Michael Goulet 2023-08-07 19:05:59 +00:00
parent 2aae331706
commit fb9030d7dd
3 changed files with 5 additions and 3 deletions

View file

@ -74,7 +74,7 @@ impl<'a, 'tcx> Iterator for Autoderef<'a, 'tcx> {
// we have some type like `&<Ty as Trait>::Assoc`, since users of // we have some type like `&<Ty as Trait>::Assoc`, since users of
// autoderef expect this type to have been structurally normalized. // autoderef expect this type to have been structurally normalized.
if self.infcx.next_trait_solver() if self.infcx.next_trait_solver()
&& let ty::Alias(ty::Projection, _) = ty.kind() && let ty::Alias(ty::Projection | ty::Inherent | ty::Weak, _) = ty.kind()
{ {
let (normalized_ty, obligations) = self.structurally_normalize(ty)?; let (normalized_ty, obligations) = self.structurally_normalize(ty)?;
self.state.obligations.extend(obligations); self.state.obligations.extend(obligations);

View file

@ -1474,7 +1474,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
let ty = self.resolve_vars_with_obligations(ty); let ty = self.resolve_vars_with_obligations(ty);
if self.next_trait_solver() if self.next_trait_solver()
&& let ty::Alias(ty::Projection, _) = ty.kind() && let ty::Alias(ty::Projection | ty::Inherent | ty::Weak, _) = ty.kind()
{ {
match self match self
.at(&self.misc(sp), self.param_env) .at(&self.misc(sp), self.param_env)

View file

@ -22,7 +22,9 @@ impl<'tcx> StructurallyNormalizeExt<'tcx> for At<'_, 'tcx> {
assert!(!ty.is_ty_var(), "should have resolved vars before calling"); assert!(!ty.is_ty_var(), "should have resolved vars before calling");
if self.infcx.next_trait_solver() { if self.infcx.next_trait_solver() {
while let ty::Alias(ty::Projection, projection_ty) = *ty.kind() { while let ty::Alias(ty::Projection | ty::Inherent | ty::Weak, projection_ty) =
*ty.kind()
{
let new_infer_ty = self.infcx.next_ty_var(TypeVariableOrigin { let new_infer_ty = self.infcx.next_ty_var(TypeVariableOrigin {
kind: TypeVariableOriginKind::NormalizeProjectionType, kind: TypeVariableOriginKind::NormalizeProjectionType,
span: self.cause.span, span: self.cause.span,