stronger consistency check in ImmTy::from_immediate
This commit is contained in:
parent
bdbf545f42
commit
23fd2860fa
@ -159,7 +159,15 @@ pub fn from_scalar(val: Scalar<Prov>, layout: TyAndLayout<'tcx>) -> Self {
|
||||
|
||||
#[inline(always)]
|
||||
pub fn from_immediate(imm: Immediate<Prov>, layout: TyAndLayout<'tcx>) -> Self {
|
||||
debug_assert!(layout.is_sized(), "immediates must be sized");
|
||||
debug_assert!(
|
||||
match (imm, layout.abi) {
|
||||
(Immediate::Scalar(..), Abi::Scalar(..)) => true,
|
||||
(Immediate::ScalarPair(..), Abi::ScalarPair(..)) => true,
|
||||
(Immediate::Uninit, _) if layout.is_sized() => true,
|
||||
_ => false,
|
||||
},
|
||||
"immediate {imm:?} does not fit to layout {layout:?}",
|
||||
);
|
||||
ImmTy { imm, layout }
|
||||
}
|
||||
|
||||
@ -448,7 +456,7 @@ fn read_immediate_from_mplace_raw(
|
||||
alloc_range(Size::ZERO, size),
|
||||
/*read_provenance*/ matches!(s, abi::Pointer(_)),
|
||||
)?;
|
||||
Some(ImmTy { imm: scalar.into(), layout: mplace.layout })
|
||||
Some(ImmTy::from_scalar(scalar, mplace.layout))
|
||||
}
|
||||
Abi::ScalarPair(
|
||||
abi::Scalar::Initialized { value: a, .. },
|
||||
@ -468,7 +476,7 @@ fn read_immediate_from_mplace_raw(
|
||||
alloc_range(b_offset, b_size),
|
||||
/*read_provenance*/ matches!(b, abi::Pointer(_)),
|
||||
)?;
|
||||
Some(ImmTy { imm: Immediate::ScalarPair(a_val, b_val), layout: mplace.layout })
|
||||
Some(ImmTy::from_immediate(Immediate::ScalarPair(a_val, b_val), mplace.layout))
|
||||
}
|
||||
_ => {
|
||||
// Neither a scalar nor scalar pair.
|
||||
|
Loading…
Reference in New Issue
Block a user