Rollup merge of #120885 - RalfJung:normal-visitor, r=compiler-errors
interpret/visitor: ensure we only see normalized types [Prior discussion on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/146212-t-compiler.2Fconst-eval/topic/Normalization.20after.20field.20projection) r? `@compiler-errors`
This commit is contained in:
commit
90b4e4116f
@ -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.
|
||||
|
@ -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.
|
||||
_ => {}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user