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.rs | 26 |
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)?; } } |