Skip to content

Commit 51fe2fe

Browse files
committed
rustc_trans: remove an unwrap by replacing a bool with Result.
1 parent 15a1e28 commit 51fe2fe

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

src/librustc_trans/cabi_x86_64.rs

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -194,44 +194,48 @@ pub fn compute_abi_info<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, fty: &mut FnType<'tc
194194
let mut sse_regs = 8; // XMM0-7
195195

196196
let mut x86_64_ty = |arg: &mut ArgType<'tcx>, is_arg: bool| {
197-
let cls = classify_arg(cx, arg);
197+
let mut cls_or_mem = classify_arg(cx, arg);
198198

199199
let mut needed_int = 0;
200200
let mut needed_sse = 0;
201-
let in_mem = match cls {
202-
Err(Memory) => true,
203-
Ok(ref cls) if is_arg => {
204-
for &c in cls {
201+
if is_arg {
202+
if let Ok(cls) = cls_or_mem {
203+
for &c in &cls {
205204
match c {
206205
Class::Int => needed_int += 1,
207206
Class::Sse => needed_sse += 1,
208207
_ => {}
209208
}
210209
}
211-
arg.layout.is_aggregate() &&
212-
(int_regs < needed_int || sse_regs < needed_sse)
210+
if arg.layout.is_aggregate() {
211+
if int_regs < needed_int || sse_regs < needed_sse {
212+
cls_or_mem = Err(Memory);
213+
}
214+
}
213215
}
214-
Ok(_) => false
215-
};
216+
}
216217

217-
if in_mem {
218-
if is_arg {
219-
arg.make_indirect_byval();
220-
} else {
221-
// `sret` parameter thus one less integer register available
222-
arg.make_indirect();
223-
int_regs -= 1;
218+
match cls_or_mem {
219+
Err(Memory) => {
220+
if is_arg {
221+
arg.make_indirect_byval();
222+
} else {
223+
// `sret` parameter thus one less integer register available
224+
arg.make_indirect();
225+
int_regs -= 1;
226+
}
224227
}
225-
} else {
226-
// split into sized chunks passed individually
227-
int_regs -= needed_int;
228-
sse_regs -= needed_sse;
229-
230-
if arg.layout.is_aggregate() {
231-
let size = arg.layout.size;
232-
arg.cast_to(cast_target(cls.as_ref().unwrap(), size))
233-
} else {
234-
arg.extend_integer_width_to(32);
228+
Ok(ref cls) => {
229+
// split into sized chunks passed individually
230+
int_regs -= needed_int;
231+
sse_regs -= needed_sse;
232+
233+
if arg.layout.is_aggregate() {
234+
let size = arg.layout.size;
235+
arg.cast_to(cast_target(cls, size))
236+
} else {
237+
arg.extend_integer_width_to(32);
238+
}
235239
}
236240
}
237241
};

0 commit comments

Comments
 (0)