Struct rustc_codegen_llvm::context::CodegenCx

source ·
pub struct CodegenCx<'ll, 'tcx> {
Show 24 fields pub tcx: TyCtxt<'tcx>, pub use_dll_storage_attrs: bool, pub tls_model: ThreadLocalMode, pub llmod: &'ll Module, pub llcx: &'ll Context, pub codegen_unit: &'tcx CodegenUnit<'tcx>, pub instances: RefCell<FxHashMap<Instance<'tcx>, &'ll Value>>, pub vtables: RefCell<FxHashMap<(Ty<'tcx>, Option<PolyExistentialTraitRef<'tcx>>), &'ll Value>>, pub const_str_cache: RefCell<FxHashMap<String, &'ll Value>>, pub const_globals: RefCell<FxHashMap<&'ll Value, &'ll Value>>, pub statics_to_rauw: RefCell<Vec<(&'ll Value, &'ll Value)>>, pub used_statics: RefCell<Vec<&'ll Value>>, pub compiler_used_statics: RefCell<Vec<&'ll Value>>, pub type_lowering: RefCell<FxHashMap<(Ty<'tcx>, Option<VariantIdx>), &'ll Type>>, pub scalar_lltypes: RefCell<FxHashMap<Ty<'tcx>, &'ll Type>>, pub isize_ty: &'ll Type, pub coverage_cx: Option<CrateCoverageContext<'ll, 'tcx>>, pub dbg_cx: Option<CodegenUnitDebugContext<'ll, 'tcx>>, eh_personality: Cell<Option<&'ll Value>>, eh_catch_typeinfo: Cell<Option<&'ll Value>>, pub rust_try_fn: Cell<Option<(&'ll Type, &'ll Value)>>, intrinsics: RefCell<FxHashMap<&'static str, (&'ll Type, &'ll Value)>>, local_gen_sym_counter: Cell<usize>, pub renamed_statics: RefCell<FxHashMap<DefId, &'ll Value>>,
}
Expand description

There is one CodegenCx per compilation unit. Each one has its own LLVM llvm::Context so that several compilation units may be optimized in parallel. All other LLVM data structures in the CodegenCx are tied to that llvm::Context.

Fields§

§tcx: TyCtxt<'tcx>§use_dll_storage_attrs: bool§tls_model: ThreadLocalMode§llmod: &'ll Module§llcx: &'ll Context§codegen_unit: &'tcx CodegenUnit<'tcx>§instances: RefCell<FxHashMap<Instance<'tcx>, &'ll Value>>

Cache instances of monomorphic and polymorphic items

§vtables: RefCell<FxHashMap<(Ty<'tcx>, Option<PolyExistentialTraitRef<'tcx>>), &'ll Value>>

Cache generated vtables

§const_str_cache: RefCell<FxHashMap<String, &'ll Value>>

Cache of constant strings,

§const_globals: RefCell<FxHashMap<&'ll Value, &'ll Value>>

Cache of emitted const globals (value -> global)

§statics_to_rauw: RefCell<Vec<(&'ll Value, &'ll Value)>>

List of globals for static variables which need to be passed to the LLVM function ReplaceAllUsesWith (RAUW) when codegen is complete. (We have to make sure we don’t invalidate any Values referring to constants.)

§used_statics: RefCell<Vec<&'ll Value>>

Statics that will be placed in the llvm.used variable See https://llvm.org/docs/LangRef.html#the-llvm-used-global-variable for details

§compiler_used_statics: RefCell<Vec<&'ll Value>>

Statics that will be placed in the llvm.compiler.used variable See https://llvm.org/docs/LangRef.html#the-llvm-compiler-used-global-variable for details

§type_lowering: RefCell<FxHashMap<(Ty<'tcx>, Option<VariantIdx>), &'ll Type>>

Mapping of non-scalar types to llvm types.

§scalar_lltypes: RefCell<FxHashMap<Ty<'tcx>, &'ll Type>>

Mapping of scalar types to llvm types.

§isize_ty: &'ll Type§coverage_cx: Option<CrateCoverageContext<'ll, 'tcx>>§dbg_cx: Option<CodegenUnitDebugContext<'ll, 'tcx>>§eh_personality: Cell<Option<&'ll Value>>§eh_catch_typeinfo: Cell<Option<&'ll Value>>§rust_try_fn: Cell<Option<(&'ll Type, &'ll Value)>>§intrinsics: RefCell<FxHashMap<&'static str, (&'ll Type, &'ll Value)>>§local_gen_sym_counter: Cell<usize>

A counter that is used for generating local symbol names

§renamed_statics: RefCell<FxHashMap<DefId, &'ll Value>>

codegen_static will sometimes create a second global variable with a different type and clear the symbol name of the original global. global_asm! needs to be able to find this new global so that it can compute the correct mangled symbol name to insert into the asm.

Implementations§

source§

impl<'ll> CodegenCx<'ll, '_>

source

pub fn const_array(&self, ty: &'ll Type, elts: &[&'ll Value]) -> &'ll Value

source

pub fn const_vector(&self, elts: &[&'ll Value]) -> &'ll Value

source

pub fn const_bytes(&self, bytes: &[u8]) -> &'ll Value

source

pub fn const_get_elt(&self, v: &'ll Value, idx: u64) -> &'ll Value

source§

impl<'ll> CodegenCx<'ll, '_>

source

pub(crate) fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value

source

pub(crate) fn static_addr_of_mut( &self, cv: &'ll Value, align: Align, kind: Option<&str>, ) -> &'ll Value

source

pub(crate) fn get_static(&self, def_id: DefId) -> &'ll Value

source

pub(crate) fn get_static_inner( &self, def_id: DefId, llty: &'ll Type, ) -> &'ll Value

source

fn codegen_static_item(&self, def_id: DefId)

source§

impl<'ll, 'tcx> CodegenCx<'ll, 'tcx>

source

pub(crate) fn new( tcx: TyCtxt<'tcx>, codegen_unit: &'tcx CodegenUnit<'tcx>, llvm_module: &'ll ModuleLlvm, ) -> Self

source

pub(crate) fn statics_to_rauw(&self) -> &RefCell<Vec<(&'ll Value, &'ll Value)>>

source

pub fn coverage_context(&self) -> Option<&CrateCoverageContext<'ll, 'tcx>>

source

pub(crate) fn create_used_variable_impl( &self, name: &'static CStr, values: &[&'ll Value], )

source§

impl<'ll> CodegenCx<'ll, '_>

source

pub(crate) fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value)

source

fn insert_intrinsic( &self, name: &'static str, args: Option<&[&'ll Type]>, ret: &'ll Type, ) -> (&'ll Type, &'ll Value)

source

fn declare_intrinsic(&self, key: &str) -> Option<(&'ll Type, &'ll Value)>

source

pub(crate) fn eh_catch_typeinfo(&self) -> &'ll Value

source§

impl CodegenCx<'_, '_>

source

pub fn generate_local_symbol_name(&self, prefix: &str) -> String

Generates a new symbol name with the given prefix. This symbol name must only be used for definitions with internal or private linkage.

source§

impl<'ll, 'tcx> CodegenCx<'ll, 'tcx>

source

pub(crate) fn coverageinfo_finalize(&self)

source

fn get_pgo_func_name_var(&self, instance: Instance<'tcx>) -> &'ll Value

For LLVM codegen, returns a function-specific Value for a global string, to hold the function name passed to LLVM intrinsic instrprof.increment(). The Value is only created once per instance. Multiple invocations with the same instance return the same Value.

source§

impl CodegenCx<'_, '_>

source

pub fn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc

Looks up debug source information about a BytePos.

source§

impl<'ll, 'tcx> CodegenCx<'ll, 'tcx>

source

pub fn declare_global(&self, name: &str, ty: &'ll Type) -> &'ll Value

Declare a global value.

If there’s a value with the same name already declared, the function will return its Value instead.

source

pub fn declare_cfn( &self, name: &str, unnamed: UnnamedAddr, fn_type: &'ll Type, ) -> &'ll Value

Declare a C ABI function.

Only use this for foreign function ABIs and glue. For Rust functions use declare_fn instead.

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn declare_entry_fn( &self, name: &str, callconv: CallConv, unnamed: UnnamedAddr, fn_type: &'ll Type, ) -> &'ll Value

Declare an entry Function

The ABI of this function can change depending on the target (although for now the same as declare_cfn)

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn declare_fn( &self, name: &str, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, instance: Option<Instance<'tcx>>, ) -> &'ll Value

Declare a Rust function.

If there’s a value with the same name already declared, the function will update the declaration and return existing Value instead.

source

pub fn define_global(&self, name: &str, ty: &'ll Type) -> Option<&'ll Value>

Declare a global with an intention to define it.

Use this function when you intend to define a global. This function will return None if the name already has a definition associated with it. In that case an error should be reported to the user, because it usually happens due to user’s fault (e.g., misuse of #[no_mangle] or #[export_name] attributes).

source

pub fn define_private_global(&self, ty: &'ll Type) -> &'ll Value

Declare a private global

Use this function when you intend to define a global without a name.

source

pub fn get_declared_value(&self, name: &str) -> Option<&'ll Value>

Gets declared value by name.

source

pub fn get_defined_value(&self, name: &str) -> Option<&'ll Value>

Gets defined or externally defined (AvailableExternally linkage) value by name.

source§

impl CodegenCx<'_, '_>

source

pub(crate) unsafe fn should_assume_dso_local( &self, llval: &Value, is_declaration: bool, ) -> bool

Whether a definition or declaration can be assumed to be local to a group of libraries that form a single DSO or executable.

source§

impl<'ll> CodegenCx<'ll, '_>

source

pub(crate) fn type_named_struct(&self, name: &str) -> &'ll Type

source

pub(crate) fn set_struct_body( &self, ty: &'ll Type, els: &[&'ll Type], packed: bool, )

source

pub(crate) fn type_void(&self) -> &'ll Type

source

pub(crate) fn type_token(&self) -> &'ll Type

source

pub(crate) fn type_metadata(&self) -> &'ll Type

source

pub(crate) fn type_ix(&self, num_bits: u64) -> &'ll Type

x Creates an integer type with the given number of bits, e.g., i24

source

pub(crate) fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type

source

pub(crate) fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type>

source

pub(crate) fn type_bool(&self) -> &'ll Type

source

pub(crate) fn type_int_from_ty(&self, t: IntTy) -> &'ll Type

source

pub(crate) fn type_uint_from_ty(&self, t: UintTy) -> &'ll Type

source

pub(crate) fn type_float_from_ty(&self, t: FloatTy) -> &'ll Type

source

pub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type

Return an LLVM type that has at most the required alignment, and exactly the required size, as a best-effort padding array.

source

pub(crate) fn type_variadic_func( &self, args: &[&'ll Type], ret: &'ll Type, ) -> &'ll Type

source

pub(crate) fn type_i1(&self) -> &'ll Type

source

pub(crate) fn type_struct(&self, els: &[&'ll Type], packed: bool) -> &'ll Type

source§

impl<'a, 'tcx> CodegenCx<'a, 'tcx>

source

pub fn align_of(&self, ty: Ty<'tcx>) -> Align

source

pub fn size_of(&self, ty: Ty<'tcx>) -> Size

source

pub fn size_and_align_of(&self, ty: Ty<'tcx>) -> (Size, Align)

Trait Implementations§

source§

impl<'tcx> AsmMethods<'tcx> for CodegenCx<'_, 'tcx>

source§

fn codegen_global_asm( &self, template: &[InlineAsmTemplatePiece], operands: &[GlobalAsmOperandRef<'tcx>], options: InlineAsmOptions, _line_spans: &[Span], )

source§

impl<'ll> BackendTypes for CodegenCx<'ll, '_>

§

type Value = &'ll Value

§

type Function = &'ll Value

§

type BasicBlock = &'ll BasicBlock

§

type Type = &'ll Type

§

type Funclet = Funclet<'ll>

§

type DIScope = &'ll Metadata

§

type DILocation = &'ll Metadata

§

type DIVariable = &'ll Metadata

source§

impl<'ll, 'tcx> BaseTypeMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn type_i8(&self) -> &'ll Type

source§

fn type_i16(&self) -> &'ll Type

source§

fn type_i32(&self) -> &'ll Type

source§

fn type_i64(&self) -> &'ll Type

source§

fn type_i128(&self) -> &'ll Type

source§

fn type_isize(&self) -> &'ll Type

source§

fn type_f16(&self) -> &'ll Type

source§

fn type_f32(&self) -> &'ll Type

source§

fn type_f64(&self) -> &'ll Type

source§

fn type_f128(&self) -> &'ll Type

source§

fn type_func(&self, args: &[&'ll Type], ret: &'ll Type) -> &'ll Type

source§

fn type_kind(&self, ty: &'ll Type) -> TypeKind

source§

fn type_ptr(&self) -> &'ll Type

source§

fn type_ptr_ext(&self, address_space: AddressSpace) -> &'ll Type

source§

fn element_type(&self, ty: &'ll Type) -> &'ll Type

source§

fn vector_length(&self, ty: &'ll Type) -> usize

Returns the number of elements in self if it is an LLVM vector type.
source§

fn float_width(&self, ty: &'ll Type) -> usize

source§

fn int_width(&self, ty: &'ll Type) -> u64

Retrieves the bit width of the integer type self.
source§

fn val_ty(&self, v: &'ll Value) -> &'ll Type

source§

fn type_array(&self, ty: &'ll Type, len: u64) -> &'ll Type

source§

impl<'ll, 'tcx> ConstMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn const_null(&self, t: &'ll Type) -> &'ll Value

source§

fn const_undef(&self, t: &'ll Type) -> &'ll Value

Generate an uninitialized value (matching uninitialized memory in MIR). Whether memory is initialized or not is tracked byte-for-byte.
source§

fn const_poison(&self, t: &'ll Type) -> &'ll Value

Generate a fake value. Poison always affects the entire value, even if just a single byte is poison. This can only be used in codepaths that are already UB, i.e., UB-free Rust code (including code that e.g. copies uninit memory with MaybeUninit) can never encounter a poison value.
source§

fn const_int(&self, t: &'ll Type, i: i64) -> &'ll Value

source§

fn const_uint(&self, t: &'ll Type, i: u64) -> &'ll Value

source§

fn const_uint_big(&self, t: &'ll Type, u: u128) -> &'ll Value

source§

fn const_bool(&self, val: bool) -> &'ll Value

source§

fn const_i16(&self, i: i16) -> &'ll Value

source§

fn const_i32(&self, i: i32) -> &'ll Value

source§

fn const_i8(&self, i: i8) -> &'ll Value

source§

fn const_u32(&self, i: u32) -> &'ll Value

source§

fn const_u64(&self, i: u64) -> &'ll Value

source§

fn const_u128(&self, i: u128) -> &'ll Value

source§

fn const_usize(&self, i: u64) -> &'ll Value

source§

fn const_u8(&self, i: u8) -> &'ll Value

source§

fn const_real(&self, t: &'ll Type, val: f64) -> &'ll Value

source§

fn const_str(&self, s: &str) -> (&'ll Value, &'ll Value)

source§

fn const_struct(&self, elts: &[&'ll Value], packed: bool) -> &'ll Value

source§

fn const_to_opt_uint(&self, v: &'ll Value) -> Option<u64>

source§

fn const_to_opt_u128(&self, v: &'ll Value, sign_ext: bool) -> Option<u128>

source§

fn scalar_to_backend( &self, cv: Scalar, layout: Scalar, llty: &'ll Type, ) -> &'ll Value

source§

fn const_data_from_alloc(&self, alloc: ConstAllocation<'tcx>) -> Self::Value

source§

fn const_ptr_byte_offset( &self, base_addr: Self::Value, offset: Size, ) -> Self::Value

source§

impl<'ll, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn create_function_debug_context( &self, instance: Instance<'tcx>, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, llfn: &'ll Value, mir: &Body<'tcx>, ) -> Option<FunctionDebugContext<'tcx, &'ll DIScope, &'ll DILocation>>

Creates the function-specific debug context. Read more
source§

fn dbg_scope_fn( &self, instance: Instance<'tcx>, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, maybe_definition_llfn: Option<&'ll Value>, ) -> &'ll DIScope

source§

fn dbg_loc( &self, scope: &'ll DIScope, inlined_at: Option<&'ll DILocation>, span: Span, ) -> &'ll DILocation

source§

fn create_vtable_debuginfo( &self, ty: Ty<'tcx>, trait_ref: Option<PolyExistentialTraitRef<'tcx>>, vtable: Self::Value, )

source§

fn extend_scope_to_file( &self, scope_metadata: &'ll DIScope, file: &SourceFile, ) -> &'ll DILexicalBlock

source§

fn debuginfo_finalize(&self)

source§

fn create_dbg_var( &self, variable_name: Symbol, variable_type: Ty<'tcx>, scope_metadata: &'ll DIScope, variable_kind: VariableKind, span: Span, ) -> &'ll DIVariable

source§

impl<'tcx> FnAbiOfHelpers<'tcx> for CodegenCx<'_, 'tcx>

§

type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>

The &FnAbi-wrapping type (or &FnAbi itself), which will be returned from fn_abi_of_* (see also handle_fn_abi_err).
source§

fn handle_fn_abi_err( &self, err: FnAbiError<'tcx>, span: Span, fn_abi_request: FnAbiRequest<'tcx>, ) -> !

Helper used for fn_abi_of_*, to adapt tcx.fn_abi_of_*(...) into a Self::FnAbiOfResult (which does not need to be a Result<...>). Read more
source§

impl HasDataLayout for CodegenCx<'_, '_>

source§

impl<'tcx, 'll> HasParamEnv<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn param_env(&self) -> ParamEnv<'tcx>

source§

impl HasTargetSpec for CodegenCx<'_, '_>

source§

impl<'tcx> HasTyCtxt<'tcx> for CodegenCx<'_, 'tcx>

source§

fn tcx(&self) -> TyCtxt<'tcx>

source§

impl<'tcx> LayoutOfHelpers<'tcx> for CodegenCx<'_, 'tcx>

§

type LayoutOfResult = TyAndLayout<'tcx, Ty<'tcx>>

The TyAndLayout-wrapping type (or TyAndLayout itself), which will be returned from layout_of (see also handle_layout_err).
source§

fn handle_layout_err( &self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>, ) -> !

Helper used for layout_of, to adapt tcx.layout_of(...) into a Self::LayoutOfResult (which does not need to be a Result<...>). Read more
source§

fn layout_tcx_at_span(&self) -> Span

Span to use for tcx.at(span), from layout_of.
source§

impl<'ll, 'tcx> LayoutTypeMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn backend_type(&self, layout: TyAndLayout<'tcx>) -> &'ll Type

The backend type used for a rust type when it’s in memory, such as when it’s stack-allocated or when it’s being loaded or stored.
source§

fn immediate_backend_type(&self, layout: TyAndLayout<'tcx>) -> &'ll Type

The backend type used for a rust type when it’s in an SSA register. Read more
source§

fn is_backend_immediate(&self, layout: TyAndLayout<'tcx>) -> bool

source§

fn is_backend_scalar_pair(&self, layout: TyAndLayout<'tcx>) -> bool

source§

fn scalar_pair_element_backend_type( &self, layout: TyAndLayout<'tcx>, index: usize, immediate: bool, ) -> &'ll Type

source§

fn cast_backend_type(&self, ty: &CastTarget) -> &'ll Type

source§

fn fn_decl_backend_type(&self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>) -> &'ll Type

source§

fn fn_ptr_backend_type(&self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>) -> &'ll Type

source§

fn reg_backend_type(&self, ty: &Reg) -> &'ll Type

source§

fn is_backend_ref(&self, layout: TyAndLayout<'tcx, Ty<'tcx>>) -> bool

A type that produces an OperandValue::Ref when loaded. Read more
source§

impl<'ll, 'tcx> MiscMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn vtables( &self, ) -> &RefCell<FxHashMap<(Ty<'tcx>, Option<PolyExistentialTraitRef<'tcx>>), &'ll Value>>

source§

fn apply_vcall_visibility_metadata( &self, ty: Ty<'tcx>, poly_trait_ref: Option<PolyExistentialTraitRef<'tcx>>, vtable: &'ll Value, )

source§

fn get_fn(&self, instance: Instance<'tcx>) -> &'ll Value

source§

fn get_fn_addr(&self, instance: Instance<'tcx>) -> &'ll Value

source§

fn eh_personality(&self) -> &'ll Value

source§

fn sess(&self) -> &Session

source§

fn codegen_unit(&self) -> &'tcx CodegenUnit<'tcx>

source§

fn set_frame_pointer_type(&self, llfn: &'ll Value)

source§

fn apply_target_cpu_attr(&self, llfn: &'ll Value)

source§

fn declare_c_main(&self, fn_type: Self::Type) -> Option<Self::Function>

Declares the extern “C” main function for the entry point. Returns None if the symbol already exists.
source§

impl<'tcx> PreDefineMethods<'tcx> for CodegenCx<'_, 'tcx>

source§

fn predefine_static( &self, def_id: DefId, linkage: Linkage, visibility: Visibility, symbol_name: &str, )

source§

fn predefine_fn( &self, instance: Instance<'tcx>, linkage: Linkage, visibility: Visibility, symbol_name: &str, )

source§

impl<'ll> StaticMethods for CodegenCx<'ll, '_>

source§

fn add_used_global(&self, global: &'ll Value)

Add a global value to a list to be stored in the llvm.used variable, an array of ptr.

source§

fn add_compiler_used_global(&self, global: &'ll Value)

Add a global value to a list to be stored in the llvm.compiler.used variable, an array of ptr.

source§

fn static_addr_of( &self, cv: &'ll Value, align: Align, kind: Option<&str>, ) -> &'ll Value

source§

fn codegen_static(&self, def_id: DefId)

source§

impl<'ll, 'tcx> TypeMembershipMethods<'tcx> for CodegenCx<'ll, 'tcx>

source§

fn add_type_metadata(&self, function: &'ll Value, typeid: String)

source§

fn set_type_metadata(&self, function: &'ll Value, typeid: String)

source§

fn typeid_metadata(&self, typeid: String) -> Option<&'ll Value>

source§

fn add_kcfi_type_metadata(&self, function: &'ll Value, kcfi_typeid: u32)

source§

fn set_kcfi_type_metadata(&self, function: &'ll Value, kcfi_typeid: u32)

Auto Trait Implementations§

§

impl<'ll, 'tcx> !DynSend for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !DynSync for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !Freeze for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !RefUnwindSafe for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !Send for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !Sync for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> Unpin for CodegenCx<'ll, 'tcx>

§

impl<'ll, 'tcx> !UnwindSafe for CodegenCx<'ll, 'tcx>

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

source§

impl<'tcx, T> DerivedTypeMethods<'tcx> for T
where T: BaseTypeMethods<'tcx> + MiscMethods<'tcx>,

source§

fn type_int(&self) -> Self::Type

source§

fn type_from_integer(&self, i: Integer) -> Self::Type

source§

fn type_from_float(&self, f: Float) -> Self::Type

source§

fn type_needs_drop(&self, ty: Ty<'tcx>) -> bool

source§

fn type_is_sized(&self, ty: Ty<'tcx>) -> bool

source§

fn type_is_freeze(&self, ty: Ty<'tcx>) -> bool

source§

fn type_has_metadata(&self, ty: Ty<'tcx>) -> bool

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<'tcx, C> FnAbiOf<'tcx> for C
where C: FnAbiOfHelpers<'tcx>,

source§

fn fn_abi_of_fn_ptr( &self, sig: Binder<TyCtxt<'tcx>, FnSig<TyCtxt<'tcx>>>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult

Compute a FnAbi suitable for indirect calls, i.e. to fn pointers. Read more
source§

fn fn_abi_of_instance( &self, instance: Instance<'tcx>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult

Compute a FnAbi suitable for declaring/defining an fn instance, and for direct calls to an fn. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<'tcx, C> LayoutOf<'tcx> for C
where C: LayoutOfHelpers<'tcx>,

source§

fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult

Computes the layout of a type. Note that this implicitly executes in “reveal all” mode, and will normalize the input type.
source§

fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult

Computes the layout of a type, at span. Note that this implicitly executes in “reveal all” mode, and will normalize the input type.
source§

impl<T> MaybeResult<T> for T

§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> PointerArithmetic for T
where T: HasDataLayout,

source§

fn pointer_size(&self) -> Size

source§

fn max_size_of_val(&self) -> Size

source§

fn target_usize_max(&self) -> u64

source§

fn target_isize_min(&self) -> i64

source§

fn target_isize_max(&self) -> i64

source§

fn target_usize_to_isize(&self, val: u64) -> i64

source§

fn truncate_to_ptr(&self, _: (u64, bool)) -> (u64, bool)

Helper function: truncate given value-“overflowed flag” pair to pointer size and update “overflowed flag” if there was an overflow. This should be called by all the other methods before returning!
source§

fn overflowing_offset(&self, val: u64, i: u64) -> (u64, bool)

source§

fn overflowing_signed_offset(&self, val: u64, i: i64) -> (u64, bool)

source§

fn offset<'tcx>(&self, val: u64, i: u64) -> Result<u64, InterpErrorInfo<'tcx>>

source§

fn signed_offset<'tcx>( &self, val: u64, i: i64, ) -> Result<u64, InterpErrorInfo<'tcx>>

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'tcx, T> Backend<'tcx> for T
where T: HasTyCtxt<'tcx> + LayoutOf<'tcx, LayoutOfResult = TyAndLayout<'tcx, Ty<'tcx>>> + FnAbiOf<'tcx, FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>> + BackendTypes,

source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<'tcx, T> CodegenMethods<'tcx> for T
where T: Backend<'tcx> + TypeMethods<'tcx> + MiscMethods<'tcx> + ConstMethods<'tcx> + StaticMethods + DebugInfoMethods<'tcx> + AsmMethods<'tcx> + PreDefineMethods<'tcx> + HasParamEnv<'tcx> + HasTyCtxt<'tcx> + HasTargetSpec,

source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

impl<'tcx, T> TypeMethods<'tcx> for T

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 808 bytes