rustc_layout_scalar_valid_range can be applied to scalar pairs and affects teh first scalar

This commit is contained in:
Oli Scherer 2022-11-03 08:17:08 +00:00
parent 2b8963a94c
commit c3eb8f2778

View File

@ -785,15 +785,7 @@ fn visit_value(&mut self, op: &OpTy<'tcx, M::Provenance>) -> InterpResult<'tcx>
}
}
Abi::ScalarPair(a_layout, b_layout) => {
// There is no `rustc_layout_scalar_valid_range_start` for pairs, so
// we would validate these things as we descend into the fields,
// but that can miss bugs in layout computation. Layout computation
// is subtle due to enums having ScalarPair layout, where one field
// is the discriminant.
if cfg!(debug_assertions)
&& !a_layout.is_uninit_valid()
&& !b_layout.is_uninit_valid()
{
if !a_layout.is_uninit_valid() && !b_layout.is_uninit_valid() {
// We can only proceed if *both* scalars need to be initialized.
// FIXME: find a way to also check ScalarPair when one side can be uninit but
// the other must be init.