@@ -153,9 +153,9 @@ fn reg_component(cls: &[Option<Class>], i: &mut usize, size: Size) -> Option<Reg
153
153
}
154
154
}
155
155
156
- fn cast_target ( cls : & [ Option < Class > ] , size : Size ) -> CastTarget {
156
+ fn cast_target ( cls : & [ Option < Class > ] , size : Size ) -> Option < CastTarget > {
157
157
let mut i = 0 ;
158
- let lo = reg_component ( cls, & mut i, size) . unwrap ( ) ;
158
+ let lo = reg_component ( cls, & mut i, size) ? ;
159
159
let offset = Size :: from_bytes ( 8 ) * ( i as u64 ) ;
160
160
let mut target = CastTarget :: from ( lo) ;
161
161
if size > offset {
@@ -164,7 +164,7 @@ fn cast_target(cls: &[Option<Class>], size: Size) -> CastTarget {
164
164
}
165
165
}
166
166
assert_eq ! ( reg_component( cls, & mut i, Size :: ZERO ) , None ) ;
167
- target
167
+ Some ( target)
168
168
}
169
169
170
170
const MAX_INT_REGS : usize = 6 ; // RDI, RSI, RDX, RCX, R8, R9
@@ -227,7 +227,9 @@ where
227
227
// split into sized chunks passed individually
228
228
if arg. layout . is_aggregate ( ) {
229
229
let size = arg. layout . size ;
230
- arg. cast_to ( cast_target ( cls, size) )
230
+ if let Some ( cast_target) = cast_target ( cls, size) {
231
+ arg. cast_to ( cast_target) ;
232
+ }
231
233
} else {
232
234
arg. extend_integer_width_to ( 32 ) ;
233
235
}
0 commit comments