Handle RPITITs properly in register_hidden_type
This commit is contained in:
parent
0940040c04
commit
419fde7a38
7 changed files with 63 additions and 14 deletions
|
@ -1,6 +1,7 @@
|
|||
use crate::errors::OpaqueHiddenTypeDiag;
|
||||
use crate::infer::{DefiningAnchor, InferCtxt, InferOk};
|
||||
use crate::traits;
|
||||
use hir::def::DefKind;
|
||||
use hir::def_id::{DefId, LocalDefId};
|
||||
use hir::{HirId, OpaqueTyOrigin};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
|
@ -552,7 +553,12 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
ty_op: |ty| match *ty.kind() {
|
||||
// We can't normalize associated types from `rustc_infer`,
|
||||
// but we can eagerly register inference variables for them.
|
||||
ty::Projection(projection_ty) if !projection_ty.has_escaping_bound_vars() => {
|
||||
// FIXME(RPITIT): Don't replace RPITITs with inference vars.
|
||||
ty::Projection(projection_ty)
|
||||
if !projection_ty.has_escaping_bound_vars()
|
||||
&& tcx.def_kind(projection_ty.item_def_id)
|
||||
!= DefKind::ImplTraitPlaceholder =>
|
||||
{
|
||||
self.infer_projection(
|
||||
param_env,
|
||||
projection_ty,
|
||||
|
@ -568,6 +574,12 @@ impl<'tcx> InferCtxt<'tcx> {
|
|||
{
|
||||
hidden_ty
|
||||
}
|
||||
// FIXME(RPITIT): This can go away when we move to associated types
|
||||
ty::Projection(proj)
|
||||
if def_id.to_def_id() == proj.item_def_id && substs == proj.substs =>
|
||||
{
|
||||
hidden_ty
|
||||
}
|
||||
_ => ty,
|
||||
},
|
||||
lt_op: |lt| lt,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue