Code like the following one ``` rust 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: ``` llvm 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](https://github.com/rust-lang/rust/blob/1586005a1d15e7d26b6c46a33e7a9643de9a77ac/src/librustc_trans/trans/mir/rvalue.rs#L110).