Closed
Description
Code like the following one
use std::marker::PhantomData;
struct Zst { phantom: PhantomData<Zst> }
#[rustc_mir(graphviz="foo.gv")]
fn mir(){
let x = Zst { phantom: PhantomData };
}
generates some unnecessary LLVM IR. Namely:
bb0: ; preds = %entry-block
%0 = getelementptr inbounds %Zst, %Zst* %x, i32 0, i32 0
store %"2.core::marker::PhantomData<Zst>" undef, %"2.core::marker::PhantomData<Zst>"* %0, align 1
br label %bb1
We should skip zero-sized fields in this code.
Metadata
Metadata
Assignees
Labels
No labels