Skip to content

Commit 8dd36af

Browse files
committed
Rollup merge of rust-lang#47626 - eddyb:one-less-unwrap, r=nagisa
rustc_trans: remove an unwrap by replacing a bool with Result. Prompted by @shepmaster. r? @nagisa
2 parents 4856f07 + 51fe2fe commit 8dd36af

File tree

1 file changed

+30
-26
lines changed

1 file changed

+30
-26
lines changed

src/librustc_trans/cabi_x86_64.rs

+30-26
Original file line numberDiff line numberDiff line change
@@ -182,44 +182,48 @@ pub fn compute_abi_info<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, fty: &mut FnType<'tc
182182
let mut sse_regs = 8; // XMM0-7
183183

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

187187
let mut needed_int = 0;
188188
let mut needed_sse = 0;
189-
let in_mem = match cls {
190-
Err(Memory) => true,
191-
Ok(ref cls) if is_arg => {
192-
for &c in cls {
189+
if is_arg {
190+
if let Ok(cls) = cls_or_mem {
191+
for &c in &cls {
193192
match c {
194193
Some(Class::Int) => needed_int += 1,
195194
Some(Class::Sse) => needed_sse += 1,
196195
_ => {}
197196
}
198197
}
199-
arg.layout.is_aggregate() &&
200-
(int_regs < needed_int || sse_regs < needed_sse)
198+
if arg.layout.is_aggregate() {
199+
if int_regs < needed_int || sse_regs < needed_sse {
200+
cls_or_mem = Err(Memory);
201+
}
202+
}
201203
}
202-
Ok(_) => false
203-
};
204+
}
204205

205-
if in_mem {
206-
if is_arg {
207-
arg.make_indirect_byval();
208-
} else {
209-
// `sret` parameter thus one less integer register available
210-
arg.make_indirect();
211-
int_regs -= 1;
206+
match cls_or_mem {
207+
Err(Memory) => {
208+
if is_arg {
209+
arg.make_indirect_byval();
210+
} else {
211+
// `sret` parameter thus one less integer register available
212+
arg.make_indirect();
213+
int_regs -= 1;
214+
}
212215
}
213-
} else {
214-
// split into sized chunks passed individually
215-
int_regs -= needed_int;
216-
sse_regs -= needed_sse;
217-
218-
if arg.layout.is_aggregate() {
219-
let size = arg.layout.size;
220-
arg.cast_to(cast_target(cls.as_ref().unwrap(), size))
221-
} else {
222-
arg.extend_integer_width_to(32);
216+
Ok(ref cls) => {
217+
// split into sized chunks passed individually
218+
int_regs -= needed_int;
219+
sse_regs -= needed_sse;
220+
221+
if arg.layout.is_aggregate() {
222+
let size = arg.layout.size;
223+
arg.cast_to(cast_target(cls, size))
224+
} else {
225+
arg.extend_integer_width_to(32);
226+
}
223227
}
224228
}
225229
};

0 commit comments

Comments
 (0)