Structurally normalize weak and inherent too
This commit is contained in:
parent
2aae331706
commit
fb9030d7dd
3 changed files with 5 additions and 3 deletions
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue