Skip to content

Commit 83ba46f

Browse files
committed
Propagate errors in cast_target()
1 parent f461a59 commit 83ba46f

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/librustc_trans/cabi_x86_64.rs

+10-5
Original file line numberDiff line numberDiff line change
@@ -175,18 +175,18 @@ fn reg_component(cls: &[Class], i: &mut usize, size: Size) -> Option<Reg> {
175175
}
176176
}
177177

178-
fn cast_target(cls: &[Class], size: Size) -> CastTarget {
178+
fn cast_target(cls: &[Class], size: Size) -> Option<CastTarget> {
179179
let mut i = 0;
180-
let lo = reg_component(cls, &mut i, size).unwrap();
180+
let lo = reg_component(cls, &mut i, size)?;
181181
let offset = Size::from_bytes(8) * (i as u64);
182182
let target = if size <= offset {
183183
CastTarget::from(lo)
184184
} else {
185-
let hi = reg_component(cls, &mut i, size - offset).unwrap();
185+
let hi = reg_component(cls, &mut i, size - offset)?;
186186
CastTarget::Pair(lo, hi)
187187
};
188188
assert_eq!(reg_component(cls, &mut i, Size::from_bytes(0)), None);
189-
target
189+
Some(target)
190190
}
191191

192192
pub fn compute_abi_info<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, fty: &mut FnType<'tcx>) {
@@ -229,7 +229,12 @@ pub fn compute_abi_info<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, fty: &mut FnType
229229

230230
if arg.layout.is_aggregate() {
231231
let size = arg.layout.size;
232-
arg.cast_to(cast_target(cls.as_ref().unwrap(), size))
232+
let cls = cls.as_ref().unwrap(); // This cannot fail when `in_mem` is false.
233+
if let Some(target) = cast_target(cls, size) {
234+
arg.cast_to(target);
235+
} else {
236+
bug!("cast_target() failed: cls {:?} size {:?} arg {:?}", cls, size, arg);
237+
}
233238
} else {
234239
arg.extend_integer_width_to(32);
235240
}

0 commit comments

Comments
 (0)