Closed
Description
pub enum SpecificDisplayItem {
PopStackingContext,
Other([f64; 22]),
}
struct DI {
item: SpecificDisplayItem,
}
#[inline(never)]
pub fn g(clip: Option<&bool>) {
clip.unwrap();
let item = SpecificDisplayItem::PopStackingContext;
do_item(&DI {
item,
});
}
#[inline(never)]
fn do_item(di: &DI) { unsafe { ext(di) } }
extern {
fn ext(di: &DI);
}
With -Zmir-opt-level=1 this compiles to
example::g:
sub rsp, 184
test rdi, rdi
je .LBB0_1
mov qword ptr [rsp], 0
mov rdi, rsp
call example::do_item
add rsp, 184
ret
.LBB0_1:
lea rdi, [rip + .L__unnamed_1]
lea rdx, [rip + .L__unnamed_2]
mov esi, 43
call qword ptr [rip + core::panicking::panic@GOTPCREL]
ud2
With mir-opt-level=2 it compiles to:
example::g:
sub rsp, 360
test rdi, rdi
je .LBB0_1
mov qword ptr [rsp], 0
lea rdi, [rsp + 8]
lea rsi, [rsp + 184]
mov edx, 176
call qword ptr [rip + memcpy@GOTPCREL]
mov rdi, rsp
call example::do_item
add rsp, 360
ret
.LBB0_1:
lea rdi, [rip + .L__unnamed_1]
lea rdx, [rip + .L__unnamed_2]
mov esi, 43
call qword ptr [rip + core::panicking::panic@GOTPCREL]
ud2
This is with Rust nightly on rust.godbolt.org