Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/eval.rs')
-rw-r--r--crates/hir-ty/src/mir/eval.rs26
1 files changed, 18 insertions, 8 deletions
diff --git a/crates/hir-ty/src/mir/eval.rs b/crates/hir-ty/src/mir/eval.rs
index 9e2861fa2b..3372f6ec2e 100644
--- a/crates/hir-ty/src/mir/eval.rs
+++ b/crates/hir-ty/src/mir/eval.rs
@@ -467,6 +467,7 @@ impl MirEvalError {
ItemContainerId::ImplId(impl_id) => Some({
db.impl_self_ty(impl_id)
.instantiate_identity()
+ .skip_norm_wip()
.display(db, display_target)
.to_string()
}),
@@ -1715,7 +1716,7 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
if let Some(ty) =
field_types.iter().last().map(|it| it.1.get().instantiate(self.interner(), subst))
{
- return self.coerce_unsized_look_through_fields(ty, goal);
+ return self.coerce_unsized_look_through_fields(ty.skip_norm_wip(), goal);
}
}
Err(MirEvalError::CoerceUnsizedError(ty.store()))
@@ -1792,10 +1793,12 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
};
let target_last_field = self.db.field_types(id.into())[last_field]
.get()
- .instantiate(self.interner(), target_subst);
+ .instantiate(self.interner(), target_subst)
+ .skip_norm_wip();
let current_last_field = self.db.field_types(id.into())[last_field]
.get()
- .instantiate(self.interner(), current_subst);
+ .instantiate(self.interner(), current_subst)
+ .skip_norm_wip();
return self.unsizing_ptr_from_addr(
target_last_field,
current_last_field,
@@ -2435,7 +2438,10 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
.fields
.offset(u32::from(f.into_raw()) as usize)
.bytes_usize();
- let ty = field_types[f].get().instantiate(this.interner(), subst);
+ let ty = field_types[f]
+ .get()
+ .instantiate(this.interner(), subst)
+ .skip_norm_wip();
let size = this.layout(ty)?.size.bytes_usize();
rec(
this,
@@ -2461,7 +2467,10 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
for (f, _) in data.fields().iter() {
let offset =
l.fields.offset(u32::from(f.into_raw()) as usize).bytes_usize();
- let ty = field_types[f].get().instantiate(this.interner(), subst);
+ let ty = field_types[f]
+ .get()
+ .instantiate(this.interner(), subst)
+ .skip_norm_wip();
let size = this.layout(ty)?.size.bytes_usize();
rec(
this,
@@ -2547,7 +2556,7 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
AdtId::StructId(s) => {
for (i, (_, ty)) in self.db.field_types(s.into()).iter().enumerate() {
let offset = layout.fields.offset(i).bytes_usize();
- let ty = ty.get().instantiate(self.interner(), args);
+ let ty = ty.get().instantiate(self.interner(), args).skip_norm_wip();
self.patch_addresses(
patch_map,
ty_of_bytes,
@@ -2568,7 +2577,7 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
) {
for (i, (_, ty)) in self.db.field_types(ev.into()).iter().enumerate() {
let offset = layout.fields.offset(i).bytes_usize();
- let ty = ty.get().instantiate(self.interner(), args);
+ let ty = ty.get().instantiate(self.interner(), args).skip_norm_wip();
self.patch_addresses(
patch_map,
ty_of_bytes,
@@ -3084,7 +3093,8 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
let addr = addr.offset(offset);
let ty = field_types[field]
.get()
- .instantiate(self.interner(), subst);
+ .instantiate(self.interner(), subst)
+ .skip_norm_wip();
self.run_drop_glue_deep(ty, locals, addr, &[], span)?;
}
}