pub(crate) struct FullCx<'ll, 'tcx> {Show 22 fields
pub tcx: TyCtxt<'tcx>,
pub scx: GenericCx<'ll, SCx<'ll>>,
pub use_dll_storage_attrs: bool,
pub tls_model: ThreadLocalMode,
pub codegen_unit: &'tcx CodegenUnit<'tcx>,
pub instances: RefCell<FxHashMap<Instance<'tcx>, &'ll Value>>,
pub vtables: RefCell<FxHashMap<(Ty<'tcx>, Option<ExistentialTraitRef<'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 coverage_cx: Option<CguCoverageContext<'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>>,
}
Fields§
§tcx: TyCtxt<'tcx>
§scx: GenericCx<'ll, SCx<'ll>>
§use_dll_storage_attrs: bool
§tls_model: ThreadLocalMode
§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<ExistentialTraitRef<'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.
coverage_cx: Option<CguCoverageContext<'ll, 'tcx>>
Extra per-CGU codegen state needed when coverage instrumentation is enabled.
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.
Methods from Deref<Target = GenericCx<'ll, SCx<'ll>>>§
pub(crate) fn get_metadata_value(&self, metadata: &'ll Metadata) -> &'ll Value
pub(crate) fn get_function(&self, name: &str) -> Option<&'ll Value>
pub(crate) fn get_md_kind_id(&self, name: &str) -> MetadataKindId
pub(crate) fn create_metadata(&self, name: String) -> Option<&'ll Metadata>
Sourcepub(crate) fn set_metadata<'a>(
&self,
val: &'a Value,
kind_id: impl Into<MetadataKindId>,
md: &'ll Metadata,
)
pub(crate) fn set_metadata<'a>( &self, val: &'a Value, kind_id: impl Into<MetadataKindId>, md: &'ll Metadata, )
A wrapper for llvm::LLVMSetMetadata
, but it takes Metadata
as a parameter instead of Value
.
Sourcepub(crate) fn declare_global(&self, name: &str, ty: &'ll Type) -> &'ll Value
pub(crate) 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.
pub(crate) fn type_named_struct(&self, name: &str) -> &'ll Type
pub(crate) fn set_struct_body( &self, ty: &'ll Type, els: &[&'ll Type], packed: bool, )
pub(crate) fn type_void(&self) -> &'ll Type
pub(crate) fn type_token(&self) -> &'ll Type
pub(crate) fn type_metadata(&self) -> &'ll Type
Sourcepub(crate) fn type_ix(&self, num_bits: u64) -> &'ll Type
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
pub(crate) fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type
pub(crate) fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type>
pub(crate) fn llcx(&self) -> &'ll Context
pub(crate) fn isize_ty(&self) -> &'ll Type
pub(crate) fn type_variadic_func( &self, args: &[&'ll Type], ret: &'ll Type, ) -> &'ll Type
pub(crate) fn type_i1(&self) -> &'ll Type
pub(crate) fn type_struct(&self, els: &[&'ll Type], packed: bool) -> &'ll Type
Trait Implementations§
Auto Trait Implementations§
impl<'ll, 'tcx> !DynSend for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !DynSync for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !Freeze for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !RefUnwindSafe for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !Send for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !Sync for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> Unpin for FullCx<'ll, 'tcx>
impl<'ll, 'tcx> !UnwindSafe for FullCx<'ll, 'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
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: 816 bytes