@@ -162,6 +162,7 @@ impl<'tcx> CValue<'tcx> {
162
162
}
163
163
164
164
/// Load a value with layout.abi of scalar
165
+ #[ track_caller]
165
166
pub ( crate ) fn load_scalar ( self , fx : & mut FunctionCx < ' _ , ' _ , ' tcx > ) -> Value {
166
167
let layout = self . 1 ;
167
168
match self . 0 {
@@ -184,6 +185,7 @@ impl<'tcx> CValue<'tcx> {
184
185
}
185
186
186
187
/// Load a value pair with layout.abi of scalar pair
188
+ #[ track_caller]
187
189
pub ( crate ) fn load_scalar_pair ( self , fx : & mut FunctionCx < ' _ , ' _ , ' tcx > ) -> ( Value , Value ) {
188
190
let layout = self . 1 ;
189
191
match self . 0 {
@@ -609,30 +611,38 @@ impl<'tcx> CPlace<'tcx> {
609
611
610
612
let mut flags = MemFlags :: new ( ) ;
611
613
flags. set_notrap ( ) ;
612
- match from. layout ( ) . abi {
613
- Abi :: Scalar ( _) => {
614
- let val = from. load_scalar ( fx) ;
615
- to_ptr. store ( fx, val, flags) ;
616
- return ;
617
- }
618
- Abi :: ScalarPair ( a_scalar, b_scalar) => {
619
- let ( value, extra) = from. load_scalar_pair ( fx) ;
620
- let b_offset = scalar_pair_calculate_b_offset ( fx. tcx , a_scalar, b_scalar) ;
621
- to_ptr. store ( fx, value, flags) ;
622
- to_ptr. offset ( fx, b_offset) . store ( fx, extra, flags) ;
623
- return ;
624
- }
625
- _ => { }
626
- }
627
614
628
615
match from. 0 {
629
616
CValueInner :: ByVal ( val) => {
630
617
to_ptr. store ( fx, val, flags) ;
631
618
}
632
- CValueInner :: ByValPair ( _, _) => {
633
- bug ! ( "Non ScalarPair abi {:?} for ByValPair CValue" , dst_layout. abi) ;
634
- }
619
+ CValueInner :: ByValPair ( val1, val2) => match from. layout ( ) . abi {
620
+ Abi :: ScalarPair ( a_scalar, b_scalar) => {
621
+ let b_offset =
622
+ scalar_pair_calculate_b_offset ( fx. tcx , a_scalar, b_scalar) ;
623
+ to_ptr. store ( fx, val1, flags) ;
624
+ to_ptr. offset ( fx, b_offset) . store ( fx, val2, flags) ;
625
+ }
626
+ _ => bug ! ( "Non ScalarPair abi {:?} for ByValPair CValue" , dst_layout. abi) ,
627
+ } ,
635
628
CValueInner :: ByRef ( from_ptr, None ) => {
629
+ match from. layout ( ) . abi {
630
+ Abi :: Scalar ( _) => {
631
+ let val = from. load_scalar ( fx) ;
632
+ to_ptr. store ( fx, val, flags) ;
633
+ return ;
634
+ }
635
+ Abi :: ScalarPair ( a_scalar, b_scalar) => {
636
+ let b_offset =
637
+ scalar_pair_calculate_b_offset ( fx. tcx , a_scalar, b_scalar) ;
638
+ let ( val1, val2) = from. load_scalar_pair ( fx) ;
639
+ to_ptr. store ( fx, val1, flags) ;
640
+ to_ptr. offset ( fx, b_offset) . store ( fx, val2, flags) ;
641
+ return ;
642
+ }
643
+ _ => { }
644
+ }
645
+
636
646
let from_addr = from_ptr. get_addr ( fx) ;
637
647
let to_addr = to_ptr. get_addr ( fx) ;
638
648
let src_layout = from. 1 ;
0 commit comments