@@ -153,9 +153,9 @@ fn reg_component(cls: &[Option<Class>], i: &mut usize, size: Size) -> Option<Reg
153153 }
154154}
155155
156- fn cast_target ( cls : & [ Option < Class > ] , size : Size ) -> CastTarget {
156+ fn cast_target ( cls : & [ Option < Class > ] , size : Size ) -> Option < CastTarget > {
157157 let mut i = 0 ;
158- let lo = reg_component ( cls, & mut i, size) . unwrap ( ) ;
158+ let lo = reg_component ( cls, & mut i, size) ? ;
159159 let offset = Size :: from_bytes ( 8 ) * ( i as u64 ) ;
160160 let mut target = CastTarget :: from ( lo) ;
161161 if size > offset {
@@ -164,7 +164,7 @@ fn cast_target(cls: &[Option<Class>], size: Size) -> CastTarget {
164164 }
165165 }
166166 assert_eq ! ( reg_component( cls, & mut i, Size :: ZERO ) , None ) ;
167- target
167+ Some ( target)
168168}
169169
170170const MAX_INT_REGS : usize = 6 ; // RDI, RSI, RDX, RCX, R8, R9
@@ -227,7 +227,9 @@ where
227227 // split into sized chunks passed individually
228228 if arg. layout . is_aggregate ( ) {
229229 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+ }
231233 } else {
232234 arg. extend_integer_width_to ( 32 ) ;
233235 }
0 commit comments