interpret/visitor: ensure we only see normalized types

This commit is contained in:
Ralf Jung 2024-02-10 16:59:21 +01:00
parent 0809f78c19
commit 29db7890ba
2 changed files with 12 additions and 0 deletions

View File

@ -149,6 +149,8 @@ pub fn project_field<P: Projectable<'tcx, M::Provenance>>(
"`field` projection called on a slice -- call `index` projection instead"
);
let offset = base.layout().fields.offset(field);
// Computing the layout does normalization, so we get a normalized type out of this
// even if the field type is non-normalized (possible e.g. via associated types).
let field_layout = base.layout().field(self, field);
// Offset may need adjustment for unsized fields.

View File

@ -153,6 +153,16 @@ fn walk_value(&mut self, v: &Self::V) -> InterpResult<'tcx> {
// We visited all parts of this one.
return Ok(());
}
// Non-normalized types should never show up here.
ty::Param(..)
| ty::Alias(..)
| ty::Bound(..)
| ty::Placeholder(..)
| ty::Infer(..)
| ty::Error(..) => throw_inval!(TooGeneric),
// The rest is handled below.
_ => {}
};