-use rustc_target::abi::call::FnAbi;
-
use crate::traits::*;
-use rustc::ty::{self, Ty, Instance};
+use rustc::ty::{self, Instance, Ty};
+use rustc_target::abi::call::FnAbi;
#[derive(Copy, Clone, Debug)]
pub struct VirtualIndex(u64);
self,
bx: &mut Bx,
llvtable: Bx::Value,
- fn_abi: &FnAbi<'tcx, Ty<'tcx>>
+ fn_abi: &FnAbi<'tcx, Ty<'tcx>>,
) -> Bx::Value {
// Load the data pointer from the object.
debug!("get_fn({:?}, {:?})", llvtable, self);
- let llvtable = bx.pointercast(
- llvtable,
- bx.type_ptr_to(bx.fn_ptr_backend_type(fn_abi))
- );
+ let llvtable = bx.pointercast(llvtable, bx.type_ptr_to(bx.fn_ptr_backend_type(fn_abi)));
let ptr_align = bx.tcx().data_layout.pointer_align.abi;
let gep = bx.inbounds_gep(llvtable, &[bx.const_usize(self.0)]);
let ptr = bx.load(gep, ptr_align);
bx.nonnull_metadata(ptr);
- // Vtable loads are invariant
+ // Vtable loads are invariant.
bx.set_invariant_load(ptr);
ptr
}
pub fn get_usize<Bx: BuilderMethods<'a, 'tcx>>(
self,
bx: &mut Bx,
- llvtable: Bx::Value
+ llvtable: Bx::Value,
) -> Bx::Value {
// Load the data pointer from the object.
debug!("get_int({:?}, {:?})", llvtable, self);
let usize_align = bx.tcx().data_layout.pointer_align.abi;
let gep = bx.inbounds_gep(llvtable, &[bx.const_usize(self.0)]);
let ptr = bx.load(gep, usize_align);
- // Vtable loads are invariant
+ // Vtable loads are invariant.
bx.set_invariant_load(ptr);
ptr
}
///
/// The `trait_ref` encodes the erased self type. Hence if we are
/// making an object `Foo<dyn Trait>` from a value of type `Foo<T>`, then
-/// `trait_ref` would map `T:Trait`.
+/// `trait_ref` would map `T: Trait`.
pub fn get_vtable<'tcx, Cx: CodegenMethods<'tcx>>(
cx: &Cx,
ty: Ty<'tcx>,
return val;
}
- // Not in the cache. Build it.
+ // Not in the cache; build it.
let nullptr = cx.const_null(cx.type_i8p());
let methods_root;
ty::ParamEnv::reveal_all(),
def_id,
substs,
- ).unwrap()
+ )
+ .unwrap(),
)
})
});
let layout = cx.layout_of(ty);
// /////////////////////////////////////////////////////////////////////////////////////////////
// If you touch this code, be sure to also make the corresponding changes to
- // `get_vtable` in rust_mir/interpret/traits.rs
+ // `get_vtable` in `rust_mir/interpret/traits.rs`.
// /////////////////////////////////////////////////////////////////////////////////////////////
let components: Vec<_> = [
cx.get_fn_addr(Instance::resolve_drop_in_place(cx.tcx(), ty)),
cx.const_usize(layout.size.bytes()),
- cx.const_usize(layout.align.abi.bytes())
- ].iter().cloned().chain(methods).collect();
+ cx.const_usize(layout.align.abi.bytes()),
+ ]
+ .iter()
+ .cloned()
+ .chain(methods)
+ .collect();
let vtable_const = cx.const_struct(&components, false);
let align = cx.data_layout().pointer_align.abi;