Skip to content

Commit 174b73e

Browse files
committed
Refactor write_cvalue_maybe_transmute to clarify code flow
1 parent a5f11c7 commit 174b73e

File tree

1 file changed

+47
-50
lines changed

1 file changed

+47
-50
lines changed

src/value_and_place.rs

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -565,12 +565,11 @@ impl<'tcx> CPlace<'tcx> {
565565
}
566566

567567
let dst_layout = self.layout();
568-
let to_ptr = match self.inner {
568+
match self.inner {
569569
CPlaceInner::Var(_local, var) => {
570570
let data = CValue(from.0, dst_layout).load_scalar(fx);
571571
let dst_ty = fx.clif_type(self.layout().ty).unwrap();
572572
transmute_value(fx, var, data, dst_ty);
573-
return;
574573
}
575574
CPlaceInner::VarPair(_local, var1, var2) => {
576575
let (data1, data2) = if from.layout().ty == dst_layout.ty {
@@ -583,61 +582,59 @@ impl<'tcx> CPlace<'tcx> {
583582
let (dst_ty1, dst_ty2) = fx.clif_pair_type(self.layout().ty).unwrap();
584583
transmute_value(fx, var1, data1, dst_ty1);
585584
transmute_value(fx, var2, data2, dst_ty2);
586-
return;
587585
}
588-
CPlaceInner::Addr(ptr, None) => {
586+
CPlaceInner::Addr(_, Some(_)) => bug!("Can't write value to unsized place {:?}", self),
587+
CPlaceInner::Addr(to_ptr, None) => {
589588
if dst_layout.size == Size::ZERO || dst_layout.abi == Abi::Uninhabited {
590589
return;
591590
}
592-
ptr
593-
}
594-
CPlaceInner::Addr(_, Some(_)) => bug!("Can't write value to unsized place {:?}", self),
595-
};
596591

597-
let mut flags = MemFlags::new();
598-
flags.set_notrap();
599-
match from.layout().abi {
600-
Abi::Scalar(_) => {
601-
let val = from.load_scalar(fx);
602-
to_ptr.store(fx, val, flags);
603-
return;
604-
}
605-
Abi::ScalarPair(a_scalar, b_scalar) => {
606-
let (value, extra) = from.load_scalar_pair(fx);
607-
let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
608-
to_ptr.store(fx, value, flags);
609-
to_ptr.offset(fx, b_offset).store(fx, extra, flags);
610-
return;
611-
}
612-
_ => {}
613-
}
592+
let mut flags = MemFlags::new();
593+
flags.set_notrap();
594+
match from.layout().abi {
595+
Abi::Scalar(_) => {
596+
let val = from.load_scalar(fx);
597+
to_ptr.store(fx, val, flags);
598+
return;
599+
}
600+
Abi::ScalarPair(a_scalar, b_scalar) => {
601+
let (value, extra) = from.load_scalar_pair(fx);
602+
let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
603+
to_ptr.store(fx, value, flags);
604+
to_ptr.offset(fx, b_offset).store(fx, extra, flags);
605+
return;
606+
}
607+
_ => {}
608+
}
614609

615-
match from.0 {
616-
CValueInner::ByVal(val) => {
617-
to_ptr.store(fx, val, flags);
618-
}
619-
CValueInner::ByValPair(_, _) => {
620-
bug!("Non ScalarPair abi {:?} for ByValPair CValue", dst_layout.abi);
621-
}
622-
CValueInner::ByRef(from_ptr, None) => {
623-
let from_addr = from_ptr.get_addr(fx);
624-
let to_addr = to_ptr.get_addr(fx);
625-
let src_layout = from.1;
626-
let size = dst_layout.size.bytes();
627-
let src_align = src_layout.align.abi.bytes() as u8;
628-
let dst_align = dst_layout.align.abi.bytes() as u8;
629-
fx.bcx.emit_small_memory_copy(
630-
fx.target_config,
631-
to_addr,
632-
from_addr,
633-
size,
634-
dst_align,
635-
src_align,
636-
true,
637-
flags,
638-
);
610+
match from.0 {
611+
CValueInner::ByVal(val) => {
612+
to_ptr.store(fx, val, flags);
613+
}
614+
CValueInner::ByValPair(_, _) => {
615+
bug!("Non ScalarPair abi {:?} for ByValPair CValue", dst_layout.abi);
616+
}
617+
CValueInner::ByRef(from_ptr, None) => {
618+
let from_addr = from_ptr.get_addr(fx);
619+
let to_addr = to_ptr.get_addr(fx);
620+
let src_layout = from.1;
621+
let size = dst_layout.size.bytes();
622+
let src_align = src_layout.align.abi.bytes() as u8;
623+
let dst_align = dst_layout.align.abi.bytes() as u8;
624+
fx.bcx.emit_small_memory_copy(
625+
fx.target_config,
626+
to_addr,
627+
from_addr,
628+
size,
629+
dst_align,
630+
src_align,
631+
true,
632+
flags,
633+
);
634+
}
635+
CValueInner::ByRef(_, Some(_)) => todo!(),
636+
}
639637
}
640-
CValueInner::ByRef(_, Some(_)) => todo!(),
641638
}
642639
}
643640

0 commit comments

Comments
 (0)