pub fn type_of<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, ty: Ty<'tcx>) -> Type {
    let ty = if !cx.shared().type_is_sized(ty) {
        cx.tcx().mk_imm_ptr(ty)
    } else {
        ty
    };
    in_memory_type_of(cx, ty)
}
/// Get the LLVM type corresponding to a Rust type, i.e. `rustc::ty::Ty`.
/// This is the right LLVM type for an alloca containing a value of that type,
/// and the pointee of an Lvalue Datum (which is always a LLVM pointer).
/// For unsized types, the returned type is a fat pointer, thus the resulting
/// LLVM type for a `Trait` Lvalue is `{ i8*, void(i8*)** }*`, which is a double
/// indirection to the actual data, unlike a `i8` Lvalue, which is just `i8*`.
/// This is needed due to the treatment of immediate values, as a fat pointer
/// is too large for it to be placed in SSA value (by our rules).
/// For the raw type without far pointer indirection, see `in_memory_type_of`.
Get the LLVM type corresponding to a Rust type, i.e.
Get the LLVM type corresponding to a Rust type i . e .
pub fn type_of<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>, ty: Ty<'tcx>) -> Type {
    let ty = if !cx.shared().type_is_sized(ty) {
        cx.tcx().mk_imm_ptr(ty)
    } else {
        ty
    };
    in_memory_type_of(cx, ty)
}
pub fn type_of < ' a , ' tcx > ( cx : & CrateContext < ' a , ' tcx > , ty : Ty < ' tcx > ) -> Type { let ty = if ! cx . shared ( ) . type_is_sized ( ty ) { cx . tcx ( ) . mk_imm_ptr ( ty ) } else { ty } ; in_memory_type_of ( cx , ty ) }
Get the LLVM type corresponding to a Rust type, i.e.
Get the LLVM type corresponding to a Rust type i . e .
cx
&CrateContext<'a, 'tcx>
ty
Ty<'tcx>
cx
&CrateContext<'a, 'tcx>
ty
Ty<'tcx>