pub(crate) struct GenericCx<'ll, T: Borrow<SCx<'ll>>>(T, PhantomData<SCx<'ll>>);Tuple Fields§
§0: T§1: PhantomData<SCx<'ll>>Implementations§
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
pub(crate) fn const_array( &self, ty: Type<'ll>, elts: &[Value<'ll>], ) -> Value<'ll>
pub(crate) fn const_bytes(&self, bytes: &[u8]) -> Value<'ll>
pub(crate) fn null_terminate_const_bytes(&self, bytes: &[u8]) -> Value<'ll>
pub(crate) fn const_get_elt(&self, v: Value<'ll>, idx: u64) -> Value<'ll>
pub(crate) fn const_null(&self, t: Type<'ll>) -> Value<'ll>
pub(crate) fn const_struct( &self, elts: &[Value<'ll>], packed: bool, ) -> Value<'ll>
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
pub(crate) fn alloc_to_backend( &self, global_alloc: GlobalAlloc<'tcx>, need_symbol_name: bool, schema: Option<&PointerAuthSchema>, ) -> Result<Value<'ll>, u64>
Source§impl<'ll> GenericCx<'ll, FullCx<'ll, '_>>
impl<'ll> GenericCx<'ll, FullCx<'ll, '_>>
pub(crate) fn const_bitcast(&self, val: Value<'ll>, ty: Type<'ll>) -> Value<'ll>
pub(crate) fn const_pointercast( &self, val: Value<'ll>, ty: Type<'ll>, ) -> Value<'ll>
Sourcepub(crate) fn static_addr_of_mut(
&self,
cv: Value<'ll>,
align: Align,
kind: Option<&str>,
) -> Value<'ll>
pub(crate) fn static_addr_of_mut( &self, cv: Value<'ll>, align: Align, kind: Option<&str>, ) -> Value<'ll>
Create a global variable.
The returned global variable is a pointer in the default address space for globals. Fails if a symbol with the given name already exists.
Sourcepub(crate) fn static_addr_of_impl(
&self,
cv: Value<'ll>,
align: Align,
kind: Option<&str>,
) -> Value<'ll>
pub(crate) fn static_addr_of_impl( &self, cv: Value<'ll>, align: Align, kind: Option<&str>, ) -> Value<'ll>
Create a global constant.
The returned global variable is a pointer in the default address space for globals.
pub(crate) fn get_static(&self, def_id: DefId) -> Value<'ll>
fn get_static_inner(&self, def_id: DefId, llty: Type<'ll>) -> Value<'ll>
fn codegen_static_item(&mut self, def_id: DefId)
Sourcepub(crate) fn add_used_global(&mut self, global: Value<'ll>)
pub(crate) fn add_used_global(&mut self, global: Value<'ll>)
Add a global value to a list to be stored in the llvm.used variable, an array of ptr.
Sourcepub(crate) fn add_compiler_used_global(&self, global: Value<'ll>)
pub(crate) fn add_compiler_used_global(&self, global: Value<'ll>)
Add a global value to a list to be stored in the llvm.compiler.used variable,
an array of ptr.
fn define_objc_classname(&self, classname: &str) -> Value<'ll>
fn get_objc_class_t(&self) -> Type<'ll>
fn get_objc_classref(&self, classname: Symbol) -> Value<'ll>
fn get_objc_selref(&self, methname: Symbol) -> Value<'ll>
pub(crate) fn define_objc_module_info(&mut self)
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
pub(crate) fn new( tcx: TyCtxt<'tcx>, codegen_unit: &'tcx CodegenUnit<'tcx>, module_refs: ModuleRefs<'ll>, bitcode_needed: bool, ) -> Self
pub(crate) fn statics_to_rauw(&self) -> &RefCell<Vec<(Value<'ll>, Value<'ll>)>>
Sourcepub(crate) fn coverage_cx(&self) -> &CguCoverageContext<'ll, 'tcx>
pub(crate) fn coverage_cx(&self) -> &CguCoverageContext<'ll, 'tcx>
Extra state that is only available when coverage instrumentation is enabled.
pub(crate) fn create_used_variable_impl( &self, name: &'static CStr, values: &[Value<'ll>], )
Sourcepub(crate) fn objc_abi_version(&self) -> u32
pub(crate) fn objc_abi_version(&self) -> u32
The Objective-C ABI that is used.
This corresponds to the -fobjc-abi-version= flag in Clang / GCC.
pub(crate) fn add_ptrauth_elf_got_flag(&self)
pub(crate) fn add_ptrauth_sign_personality_flag(&self)
pub(crate) fn add_ptrauth_pauthabi_version_and_platform_flags( &self, aarch64_elf_pauthabi_version: u32, )
pub(crate) fn add_objc_module_flags(&self)
pub(crate) fn is_sanitizer_type_ignored( &self, sanitizer: &CStr, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, ) -> bool
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
pub(crate) fn get_metadata_value(&self, metadata: &'ll Metadata) -> Value<'ll>
pub(crate) fn get_const_int(&self, ty: Type<'ll>, val: u64) -> Value<'ll>
pub(crate) fn get_const_i64(&self, n: u64) -> Value<'ll>
pub(crate) fn get_const_i32(&self, n: u64) -> Value<'ll>
pub(crate) fn get_const_i16(&self, n: u64) -> Value<'ll>
pub(crate) fn get_const_i8(&self, n: u64) -> Value<'ll>
pub(crate) fn get_md_kind_id(&self, name: &str) -> MetadataKindId
pub(crate) fn create_metadata(&self, name: &[u8]) -> &'ll Metadata
pub(crate) fn get_functions(&self) -> Vec<Value<'ll>>
Source§impl GenericCx<'_, FullCx<'_, '_>>
impl GenericCx<'_, FullCx<'_, '_>>
Sourcepub(crate) fn generate_local_symbol_name(&self, prefix: &str) -> String
pub(crate) 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.
Sourcepub(crate) fn generate_global_symbol_name(&self) -> String
pub(crate) fn generate_global_symbol_name(&self) -> String
Generates a new global symbol name with the given prefix.
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
Sourcepub(crate) fn md_node_in_context(
&self,
md_list: &[&'ll Metadata],
) -> &'ll Metadata
pub(crate) fn md_node_in_context( &self, md_list: &[&'ll Metadata], ) -> &'ll Metadata
Wrapper for LLVMMDNodeInContext2, i.e. llvm::MDNode::get.
Sourcepub(crate) fn set_metadata(
&self,
val: Value<'ll>,
kind_id: MetadataKindId,
md: &'ll Metadata,
)
pub(crate) fn set_metadata( &self, val: Value<'ll>, kind_id: MetadataKindId, md: &'ll Metadata, )
A wrapper for llvm::LLVMSetMetadata, but it takes Metadata as a parameter instead of Value.
Sourcepub(crate) fn set_metadata_node(
&self,
instruction: Value<'ll>,
kind_id: MetadataKindId,
md_list: &[&'ll Metadata],
) -> &'ll Metadata
pub(crate) fn set_metadata_node( &self, instruction: Value<'ll>, kind_id: MetadataKindId, md_list: &[&'ll Metadata], ) -> &'ll Metadata
Helper method for the sequence of calls:
LLVMMDNodeInContext2(to create anllvm::MDNodefrom a list of metadata)LLVMMetadataAsValue(to adapt that node to anllvm::Value)LLVMSetMetadata(to set that node as metadata ofkind_idforinstruction)
Sourcepub(crate) fn module_add_named_metadata_node(
&self,
module: Module<'ll>,
kind_name: &CStr,
md_list: &[&'ll Metadata],
)
pub(crate) fn module_add_named_metadata_node( &self, module: Module<'ll>, kind_name: &CStr, md_list: &[&'ll Metadata], )
Helper method for the sequence of calls:
LLVMMDNodeInContext2(to create anllvm::MDNodefrom a list of metadata)LLVMMetadataAsValue(to adapt that node to anllvm::Value)LLVMAddNamedMetadataOperand(to set that node as metadata ofkind_nameformodule)
Sourcepub(crate) fn global_add_metadata_node(
&self,
global: Value<'ll>,
kind_id: MetadataKindId,
md_list: &[&'ll Metadata],
)
pub(crate) fn global_add_metadata_node( &self, global: Value<'ll>, kind_id: MetadataKindId, md_list: &[&'ll Metadata], )
Helper method for the sequence of calls:
LLVMMDNodeInContext2(to create anllvm::MDNodefrom a list of metadata)LLVMGlobalAddMetadata(to set that node as metadata ofkind_idforglobal)
Sourcepub(crate) fn global_set_metadata_node(
&self,
global: Value<'ll>,
kind_id: MetadataKindId,
md_list: &[&'ll Metadata],
)
pub(crate) fn global_set_metadata_node( &self, global: Value<'ll>, kind_id: MetadataKindId, md_list: &[&'ll Metadata], )
Helper method for the sequence of calls:
LLVMMDNodeInContext2(to create anllvm::MDNodefrom a list of metadata)LLVMGlobalSetMetadata(to set that node as metadata ofkind_idforglobal)
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
pub(crate) fn coverageinfo_finalize(&mut self)
Sourcefn covfun_section_name(&self) -> &CStr
fn covfun_section_name(&self) -> &CStr
Returns the section name to use when embedding per-function coverage information in the object file, according to the target’s object file format. LLVM’s coverage tools use information from this section when producing coverage reports.
Typical values are:
__llvm_covfunon Linux__LLVM_COV,__llvm_covfunon macOS (includes__LLVM_COV,segment prefix).lcovfun$Mon Windows (includes$Msorting suffix)
Sourcefn ensure_pgo_func_name_var(&self, instance: Instance<'tcx>) -> Value<'ll>
fn ensure_pgo_func_name_var(&self, instance: Instance<'tcx>) -> Value<'ll>
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.
This has the side-effect of causing coverage codegen to consider this function “used”, making it eligible to emit an associated covfun record.
Source§impl<'ll> GenericCx<'ll, FullCx<'ll, '_>>
impl<'ll> GenericCx<'ll, FullCx<'ll, '_>>
Sourcefn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc
fn lookup_debug_loc(&self, pos: BytePos) -> DebugLoc
Looks up debug source information about a BytePos.
fn create_template_type_parameter( &self, name: &str, actual_type_metadata: &'ll Metadata, ) -> &'ll Metadata
Sourcepub(crate) fn debuginfo_finalize(&self)
pub(crate) fn debuginfo_finalize(&self)
Creates any deferred debug metadata nodes
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
Sourcepub(crate) fn declare_global(&self, name: &str, ty: Type<'ll>) -> Value<'ll>
pub(crate) fn declare_global(&self, name: &str, ty: Type<'ll>) -> Value<'ll>
Declare a global value.
If there’s a value with the same name already declared, the function will return its Value instead.
Sourcepub(crate) fn declare_global_in_addrspace(
&self,
name: &str,
ty: Type<'ll>,
addr_space: AddressSpace,
) -> Value<'ll>
pub(crate) fn declare_global_in_addrspace( &self, name: &str, ty: Type<'ll>, addr_space: AddressSpace, ) -> Value<'ll>
Declare a global value in a specific address space.
If there’s a value with the same name already declared, the function will return its Value instead.
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
Sourcepub(crate) fn declare_cfn(
&self,
name: &str,
unnamed: UnnamedAddr,
fn_type: Type<'ll>,
) -> Value<'ll>
pub(crate) fn declare_cfn( &self, name: &str, unnamed: UnnamedAddr, fn_type: Type<'ll>, ) -> Value<'ll>
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.
Sourcepub(crate) fn declare_entry_fn(
&self,
name: &str,
callconv: CallConv,
unnamed: UnnamedAddr,
fn_type: Type<'ll>,
) -> Value<'ll>
pub(crate) fn declare_entry_fn( &self, name: &str, callconv: CallConv, unnamed: UnnamedAddr, fn_type: Type<'ll>, ) -> Value<'ll>
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§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
Sourcepub(crate) fn define_global(
&self,
name: &str,
ty: Type<'ll>,
) -> Option<Value<'ll>>
pub(crate) fn define_global( &self, name: &str, ty: Type<'ll>, ) -> Option<Value<'ll>>
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).
Sourcepub(crate) fn get_declared_value(&self, name: &str) -> Option<Value<'ll>>
pub(crate) fn get_declared_value(&self, name: &str) -> Option<Value<'ll>>
Gets declared value by name.
Sourcepub(crate) fn get_defined_value(&self, name: &str) -> Option<Value<'ll>>
pub(crate) fn get_defined_value(&self, name: &str) -> Option<Value<'ll>>
Gets defined or externally defined (AvailableExternally linkage) value by name.
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
fn predefine_without_aliases( &self, instance: Instance<'tcx>, attrs: &CodegenFnAttrs, linkage: Linkage, visibility: Visibility, symbol_name: &str, ) -> Value<'ll>
Sourcefn add_static_aliases(
&self,
aliasee: Value<'ll>,
aliases: &[(DefId, Linkage, Visibility)],
)
fn add_static_aliases( &self, aliasee: Value<'ll>, aliases: &[(DefId, Linkage, Visibility)], )
LLVM has the concept of an alias.
We need this for the “externally implementable items” feature,
though it’s generally useful.
On macos, though this might be a more general problem, function symbols have a fixed target architecture. This is necessary, since macos binaries may contain code for both ARM and x86 macs.
LLVM can add attributes for target architecture to function symbols, cannot do so for statics, but importantly, also cannot for aliases even when aliases may refer to a function symbol.
This is not a problem: instead of using LLVM aliases, we can just generate a new function symbol (with target architecture!) which effectively comes down to:
fn alias_name(...args) {
original_name(...args)
}That’s also an alias.
This does mean that the alias symbol has a different address than the original symbol (assuming no optimizations by LLVM occur). This is unacceptable for statics. So for statics we do want to use LLVM aliases, which is fine, since for those we don’t care about target architecture anyway.
So, this function is for static aliases. See add_function_aliases for the alternative.
Sourcefn add_function_aliases(
&self,
aliasee_instance: Instance<'tcx>,
aliasee: Value<'ll>,
attrs: &CodegenFnAttrs,
aliases: &[(DefId, Linkage, Visibility)],
)
fn add_function_aliases( &self, aliasee_instance: Instance<'tcx>, aliasee: Value<'ll>, attrs: &CodegenFnAttrs, aliases: &[(DefId, Linkage, Visibility)], )
See add_static_aliases for docs.
Sourcepub(crate) fn assume_dso_local(
&self,
llval: Value<'ll>,
is_declaration: bool,
) -> bool
pub(crate) fn assume_dso_local( &self, llval: Value<'ll>, is_declaration: bool, ) -> bool
A definition or declaration can be assumed to be local to a group of libraries that form a single DSO or executable. Marks the local as DSO if so.
fn set_visibility( &self, lldecl: Value<'ll>, linkage: Linkage, visibility: Visibility, )
fn should_assume_dso_local( &self, llval: Value<'ll>, is_declaration: bool, ) -> bool
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
pub(crate) fn type_named_struct(&self, name: &str) -> Type<'ll>
pub(crate) fn set_struct_body(&self, ty: Type<'ll>, els: &[Type<'ll>])
pub(crate) fn set_struct_body_packed(&self, ty: Type<'ll>, els: &[Type<'ll>])
pub(crate) fn type_void(&self) -> Type<'ll>
Sourcepub(crate) fn type_ix(&self, num_bits: u64) -> Type<'ll>
pub(crate) fn type_ix(&self, num_bits: u64) -> Type<'ll>
x Creates an integer type with the given number of bits, e.g., i24
pub(crate) fn type_vector(&self, ty: Type<'ll>, count: u64) -> Type<'ll>
pub(crate) fn type_scalable_vector( &self, ty: Type<'ll>, count: u64, ) -> Type<'ll>
pub(crate) fn add_func(&self, name: &str, ty: Type<'ll>) -> Value<'ll>
pub(crate) fn get_return_type(&self, ty: Type<'ll>) -> Type<'ll>
pub(crate) fn func_params_types(&self, ty: Type<'ll>) -> Vec<Type<'ll>>
pub(crate) fn func_is_variadic(&self, ty: Type<'ll>) -> bool
pub(crate) fn struct_element_types(&self, ty: Type<'ll>) -> Vec<Type<'ll>>
Source§impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> GenericCx<'ll, FullCx<'ll, 'tcx>>
pub(crate) fn type_int_from_ty(&self, t: IntTy) -> Type<'ll>
pub(crate) fn type_uint_from_ty(&self, t: UintTy) -> Type<'ll>
pub(crate) fn type_float_from_ty(&self, t: FloatTy) -> Type<'ll>
Sourcepub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> Type<'ll>
pub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> Type<'ll>
Return an LLVM type that has at most the required alignment, and exactly the required size, as a best-effort padding array.
Source§impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> GenericCx<'ll, CX>
pub(crate) fn llcx(&self) -> Context<'ll>
pub(crate) fn llmod(&self) -> Module<'ll>
pub(crate) fn isize_ty(&self) -> Type<'ll>
pub(crate) fn type_variadic_func( &self, args: &[Type<'ll>], ret: Type<'ll>, ) -> Type<'ll>
pub(crate) fn type_i1(&self) -> Type<'ll>
pub(crate) fn type_struct(&self, els: &[Type<'ll>]) -> Type<'ll>
pub(crate) fn type_packed_struct(&self, els: &[Type<'ll>]) -> Type<'ll>
pub(crate) fn type_bf16(&self) -> Type<'ll>
pub(crate) fn type_array(&self, ty: Type<'ll>, len: u64) -> Type<'ll>
Trait Implementations§
Source§impl<'tcx> AsmCodegenMethods<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
impl<'tcx> AsmCodegenMethods<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
Source§fn codegen_global_asm(
&mut self,
template: &[InlineAsmTemplatePiece],
operands: &[GlobalAsmOperandRef<'tcx>],
options: InlineAsmOptions,
_line_spans: &[Span],
extra_rust_target_features: &[String],
)
fn codegen_global_asm( &mut self, template: &[InlineAsmTemplatePiece], operands: &[GlobalAsmOperandRef<'tcx>], options: InlineAsmOptions, _line_spans: &[Span], extra_rust_target_features: &[String], )
Source§impl<'ll, CX: Borrow<SCx<'ll>>> BackendTypes for GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> BackendTypes for GenericCx<'ll, CX>
type Function = Value<'ll>
type BasicBlock = &'ll BasicBlock
type Funclet = Funclet<'ll>
type Value = Value<'ll>
type Type = Type<'ll>
type FunctionSignature = Type<'ll>
type DIScope = &'ll Metadata
type DILocation = &'ll Metadata
type DIVariable = &'ll Metadata
Source§impl<'ll, CX: Borrow<SCx<'ll>>> BaseTypeCodegenMethods for GenericCx<'ll, CX>
impl<'ll, CX: Borrow<SCx<'ll>>> BaseTypeCodegenMethods for GenericCx<'ll, CX>
fn type_i8(&self) -> Type<'ll>
fn type_i16(&self) -> Type<'ll>
fn type_i32(&self) -> Type<'ll>
fn type_i64(&self) -> Type<'ll>
fn type_i128(&self) -> Type<'ll>
fn type_isize(&self) -> Type<'ll>
fn type_f16(&self) -> Type<'ll>
fn type_f16b(&self) -> Type<'ll>
fn type_f32(&self) -> Type<'ll>
fn type_f64(&self) -> Type<'ll>
fn type_f128(&self) -> Type<'ll>
fn type_ppcf128(&self) -> Type<'ll>
fn type_x87_f80(&self) -> Type<'ll>
fn type_func(&self, args: &[Type<'ll>], ret: Type<'ll>) -> Type<'ll>
fn type_ptr(&self) -> Type<'ll>
fn type_ptr_ext(&self, address_space: AddressSpace) -> Type<'ll>
Source§fn vector_element_type_and_length(
&self,
ty: Self::Type,
) -> Option<(Self::Type, u64)>
fn vector_element_type_and_length( &self, ty: Self::Type, ) -> Option<(Self::Type, u64)>
ty if it is a vector type, otherwise returns
None.Source§fn float_type(&self, ty: Type<'ll>) -> Option<Float>
fn float_type(&self, ty: Type<'ll>) -> Option<Float>
ty. Returns None is ty is not a float.Source§fn int_width(&self, ty: Type<'ll>) -> Option<u64>
fn int_width(&self, ty: Type<'ll>) -> Option<u64>
ty. Returns None is ty is not an
integer.fn val_ty(&self, v: Value<'ll>) -> Type<'ll>
Source§impl<'ll, 'tcx> ConstCodegenMethods for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> ConstCodegenMethods for GenericCx<'ll, FullCx<'ll, 'tcx>>
fn const_null(&self, t: Type<'ll>) -> Value<'ll>
Source§fn const_undef(&self, t: Type<'ll>) -> Value<'ll>
fn const_undef(&self, t: Type<'ll>) -> Value<'ll>
Source§fn const_poison(&self, t: Type<'ll>) -> Value<'ll>
fn const_poison(&self, t: Type<'ll>) -> Value<'ll>
MaybeUninit) can never encounter a
poison value.fn const_bool(&self, val: bool) -> Value<'ll>
fn const_i8(&self, i: i8) -> Value<'ll>
fn const_i16(&self, i: i16) -> Value<'ll>
fn const_i32(&self, i: i32) -> Value<'ll>
fn const_i64(&self, i: i64) -> Value<'ll>
fn const_int(&self, t: Type<'ll>, i: i64) -> Value<'ll>
fn const_u8(&self, i: u8) -> Value<'ll>
fn const_u32(&self, i: u32) -> Value<'ll>
fn const_u64(&self, i: u64) -> Value<'ll>
fn const_u128(&self, i: u128) -> Value<'ll>
fn const_usize(&self, i: u64) -> Value<'ll>
fn const_uint(&self, t: Type<'ll>, i: u64) -> Value<'ll>
fn const_uint_big(&self, t: Type<'ll>, u: u128) -> Value<'ll>
fn const_real(&self, t: Type<'ll>, val: f64) -> Value<'ll>
fn const_str(&self, s: &str) -> (Value<'ll>, Value<'ll>)
fn const_struct(&self, elts: &[Value<'ll>], packed: bool) -> Value<'ll>
fn const_vector(&self, elts: &[Value<'ll>]) -> Value<'ll>
fn const_to_opt_uint(&self, v: Value<'ll>) -> Option<u64>
fn const_to_opt_u128(&self, v: Value<'ll>, sign_ext: bool) -> Option<u128>
fn scalar_to_backend_with_pac( &self, cv: Scalar, layout: Scalar, llty: Type<'ll>, schema: Option<&PointerAuthSchema>, ) -> Value<'ll>
fn const_ptr_byte_offset( &self, base_addr: Self::Value, offset: Size, ) -> Self::Value
fn scalar_to_backend( &self, cv: Scalar, layout: Scalar, llty: Self::Type, ) -> Self::Value
Source§impl<'ll, 'tcx> DebugInfoCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> DebugInfoCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
fn create_vtable_debuginfo( &self, ty: Ty<'tcx>, trait_ref: Option<ExistentialTraitRef<'tcx>>, vtable: Self::Value, )
Source§impl<'tcx> FnAbiOfHelpers<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
impl<'tcx> FnAbiOfHelpers<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
Source§fn handle_fn_abi_err(
&self,
err: FnAbiError<'tcx>,
span: Span,
fn_abi_request: FnAbiRequest<'tcx>,
) -> !
fn handle_fn_abi_err( &self, err: FnAbiError<'tcx>, span: Span, fn_abi_request: FnAbiRequest<'tcx>, ) -> !
fn_abi_of_*, to adapt tcx.fn_abi_of_*(...) into a
Self::FnAbiOfResult (which does not need to be a Result<...>). Read moreSource§type FnAbiOfResult: MaybeResult<&'tcx FnAbi<'tcx, Ty<'tcx>>> = &'tcx FnAbi<'tcx, Ty<'tcx>>
type FnAbiOfResult: MaybeResult<&'tcx FnAbi<'tcx, Ty<'tcx>>> = &'tcx FnAbi<'tcx, Ty<'tcx>>
&FnAbi-wrapping type (or &FnAbi itself), which will be
returned from fn_abi_of_* (see also handle_fn_abi_err).Source§impl HasDataLayout for GenericCx<'_, FullCx<'_, '_>>
impl HasDataLayout for GenericCx<'_, FullCx<'_, '_>>
fn data_layout(&self) -> &TargetDataLayout
Source§impl HasTargetSpec for GenericCx<'_, FullCx<'_, '_>>
impl HasTargetSpec for GenericCx<'_, FullCx<'_, '_>>
fn target_spec(&self) -> &Target
Source§impl<'tcx, 'll> HasTypingEnv<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'tcx, 'll> HasTypingEnv<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
fn typing_env(&self) -> TypingEnv<'tcx>
Source§impl<'tcx> LayoutOfHelpers<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
impl<'tcx> LayoutOfHelpers<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
Source§fn handle_layout_err(
&self,
err: LayoutError<'tcx>,
span: Span,
ty: Ty<'tcx>,
) -> !
fn handle_layout_err( &self, err: LayoutError<'tcx>, span: Span, ty: Ty<'tcx>, ) -> !
layout_of, to adapt tcx.layout_of(...) into a
Self::LayoutOfResult (which does not need to be a Result<...>). Read moreSource§type LayoutOfResult: MaybeResult<TyAndLayout<'tcx, Ty<'tcx>>> = TyAndLayout<'tcx, Ty<'tcx>>
type LayoutOfResult: MaybeResult<TyAndLayout<'tcx, Ty<'tcx>>> = TyAndLayout<'tcx, Ty<'tcx>>
TyAndLayout-wrapping type (or TyAndLayout itself), which will be
returned from layout_of (see also handle_layout_err).Source§fn layout_tcx_at_span(&self) -> Span
fn layout_tcx_at_span(&self) -> Span
Span to use for tcx.at(span), from layout_of.Source§impl<'ll, 'tcx> LayoutTypeCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> LayoutTypeCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
Source§fn backend_type(&self, layout: TyAndLayout<'tcx>) -> Type<'ll>
fn backend_type(&self, layout: TyAndLayout<'tcx>) -> Type<'ll>
Source§fn immediate_backend_type(&self, layout: TyAndLayout<'tcx>) -> Type<'ll>
fn immediate_backend_type(&self, layout: TyAndLayout<'tcx>) -> Type<'ll>
fn scalar_pair_element_backend_type( &self, layout: TyAndLayout<'tcx>, index: usize, immediate: bool, ) -> Type<'ll>
fn cast_backend_type(&self, ty: &CastTarget) -> Type<'ll>
fn fn_decl_backend_type(&self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>) -> Type<'ll>
fn fn_ptr_backend_type(&self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>) -> Type<'ll>
fn reg_backend_type(&self, ty: &Reg) -> Type<'ll>
Source§impl<'ll, 'tcx> MiscCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> MiscCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
fn vtables( &self, ) -> &RefCell<FxHashMap<(Ty<'tcx>, Option<ExistentialTraitRef<'tcx>>), Value<'ll>>>
fn apply_vcall_visibility_metadata( &self, ty: Ty<'tcx>, poly_trait_ref: Option<ExistentialTraitRef<'tcx>>, vtable: Value<'ll>, )
fn get_fn(&self, instance: Instance<'tcx>) -> Value<'ll>
fn get_fn_addr( &self, instance: Instance<'tcx>, pointer_auth_schema: Option<&PointerAuthSchema>, ) -> Value<'ll>
fn eh_personality(&self) -> Value<'ll>
fn sess(&self) -> &Session
fn set_frame_pointer_type(&self, llfn: Value<'ll>)
fn apply_target_cpu_attr(&self, llfn: Value<'ll>)
Source§fn apply_default_optimisation_attrs(&self, llfn: Value<'ll>)
fn apply_default_optimisation_attrs(&self, llfn: Value<'ll>)
Source§impl<'tcx> PreDefineCodegenMethods<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
impl<'tcx> PreDefineCodegenMethods<'tcx> for GenericCx<'_, FullCx<'_, 'tcx>>
fn predefine_static( &mut self, def_id: DefId, linkage: Linkage, visibility: Visibility, symbol_name: &str, )
fn predefine_fn( &mut self, instance: Instance<'tcx>, linkage: Linkage, visibility: Visibility, symbol_name: &str, )
Source§impl<'ll> StaticCodegenMethods for GenericCx<'ll, FullCx<'ll, '_>>
impl<'ll> StaticCodegenMethods for GenericCx<'ll, FullCx<'ll, '_>>
Source§fn static_addr_of(
&self,
alloc: ConstAllocation<'_>,
kind: Option<&str>,
) -> Value<'ll>
fn static_addr_of( &self, alloc: ConstAllocation<'_>, kind: Option<&str>, ) -> Value<'ll>
Get a pointer to a global variable.
The pointer will always be in the default address space. If global variables default to a different address space, an addrspacecast is inserted.
fn codegen_static(&mut self, def_id: DefId)
Source§impl<'ll, 'tcx> TypeMembershipCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
impl<'ll, 'tcx> TypeMembershipCodegenMethods<'tcx> for GenericCx<'ll, FullCx<'ll, 'tcx>>
fn add_type_metadata(&self, function: Value<'ll>, typeid: &[u8])
fn set_type_metadata(&self, function: Value<'ll>, typeid: &[u8])
fn add_kcfi_type_metadata(&self, function: Value<'ll>, kcfi_typeid: u32)
fn set_kcfi_type_metadata(&self, function: Value<'ll>, kcfi_typeid: u32)
Auto Trait Implementations§
impl<'ll, T> !DynSend for GenericCx<'ll, T>
impl<'ll, T> !DynSync for GenericCx<'ll, T>
impl<'ll, T> !RefUnwindSafe for GenericCx<'ll, T>
impl<'ll, T> !Send for GenericCx<'ll, T>
impl<'ll, T> !Sync for GenericCx<'ll, T>
impl<'ll, T> !UnwindSafe for GenericCx<'ll, T>
impl<'ll, T> Forget for GenericCx<'ll, T>
impl<'ll, T> Freeze for GenericCx<'ll, T>where
T: Freeze,
impl<'ll, T> Move for GenericCx<'ll, T>
impl<'ll, T> Unpin for GenericCx<'ll, T>where
T: Unpin,
impl<'ll, T> UnsafeUnpin for GenericCx<'ll, T>where
T: UnsafeUnpin,
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
impl<T> CryptoRng for T
Source§impl<'tcx, T> DerivedTypeCodegenMethods<'tcx> for T
impl<'tcx, T> DerivedTypeCodegenMethods<'tcx> for T
fn type_int(&self) -> Self::Type
fn type_from_integer(&self, i: Integer) -> Self::Type
fn type_from_float(&self, f: Float) -> Self::Type
fn type_needs_drop(&self, ty: Ty<'tcx>) -> bool
fn type_is_sized(&self, ty: Ty<'tcx>) -> bool
fn type_is_freeze(&self, ty: Ty<'tcx>) -> bool
fn type_from_primitive(&self, p: Primitive) -> Self::Type
fn type_from_scalar(&self, s: Scalar) -> Self::Type
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<'tcx, C> FnAbiOf<'tcx> for Cwhere
C: FnAbiOfHelpers<'tcx>,
impl<'tcx, C> FnAbiOf<'tcx> for Cwhere
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
fn fn_abi_of_fn_ptr( &self, sig: Binder<TyCtxt<'tcx>, FnSig<TyCtxt<'tcx>>>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult
Source§fn fn_abi_of_instance_no_deduced_attrs(
&self,
instance: Instance<'tcx>,
extra_args: &'tcx RawList<(), Ty<'tcx>>,
) -> Self::FnAbiOfResult
fn fn_abi_of_instance_no_deduced_attrs( &self, instance: Instance<'tcx>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult
FnAbi suitable for declaring/defining an fn instance, and for direct calls*
to an fn. Indirectly-passed parameters in the returned ABI might not include all possible
codegen optimization attributes (such as ReadOnly or CapturesNone), as deducing these
requires inspection of function bodies that can lead to cycles when performed during typeck.
Post typeck, you should prefer the optimized ABI returned by fn_abi_of_instance. Read moreSource§fn fn_abi_of_instance(
&self,
instance: Instance<'tcx>,
extra_args: &'tcx RawList<(), Ty<'tcx>>,
) -> Self::FnAbiOfResult
fn fn_abi_of_instance( &self, instance: Instance<'tcx>, extra_args: &'tcx RawList<(), Ty<'tcx>>, ) -> Self::FnAbiOfResult
FnAbi suitable for declaring/defining an fn instance, and for direct calls*
to an fn. Indirectly-passed parameters in the returned ABI will include applicable
codegen optimization attributes, including ReadOnly and CapturesNone – deduction of
which requires inspection of function bodies that can lead to cycles when performed during
typeck. During typeck, you should therefore use instead the unoptimized ABI returned by
fn_abi_of_instance_no_deduced_attrs. Read moreSource§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<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<'tcx, C> LayoutOf<'tcx> for Cwhere
C: LayoutOfHelpers<'tcx>,
impl<'tcx, C> LayoutOf<'tcx> for Cwhere
C: LayoutOfHelpers<'tcx>,
Source§fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
fn layout_of(&self, ty: Ty<'tcx>) -> Self::LayoutOfResult
TypingMode::PostAnalysis, and will normalize the input type.Source§fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
fn spanned_layout_of(&self, ty: Ty<'tcx>, span: Span) -> Self::LayoutOfResult
span. Note that this implicitly
executes in TypingMode::PostAnalysis, and will normalize the input type.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<T> PointerArithmetic for Twhere
T: HasDataLayout,
impl<T> PointerArithmetic for Twhere
T: HasDataLayout,
fn pointer_size(&self) -> Size
fn max_size_of_val(&self) -> Size
fn target_usize_max(&self) -> u64
fn target_isize_min(&self) -> i64
fn target_isize_max(&self) -> i64
fn truncate_to_target_usize(&self, val: u64) -> u64
fn sign_extend_to_target_isize(&self, val: u64) -> i64
Source§impl<R> Rng for R
impl<R> Rng for R
Source§fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn random<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
StandardUniform distribution. Read moreSource§fn random_iter<T>(self) -> Iter<StandardUniform, Self, T> ⓘ
fn random_iter<T>(self) -> Iter<StandardUniform, Self, T> ⓘ
Source§fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn random_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
Source§fn random_bool(&mut self, p: f64) -> bool
fn random_bool(&mut self, p: f64) -> bool
p of being true. Read moreSource§fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool
numerator/denominator of being
true. Read moreSource§fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
fn sample<T, D>(&mut self, distr: D) -> Twhere
D: Distribution<T>,
Source§fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T> ⓘwhere
D: Distribution<T>,
Self: Sized,
fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T> ⓘwhere
D: Distribution<T>,
Self: Sized,
Source§fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
fn gen<T>(&mut self) -> Twhere
StandardUniform: Distribution<T>,
Renamed to random to avoid conflict with the new gen keyword in Rust 2024.
Rng::random.Source§fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
fn gen_range<T, R>(&mut self, range: R) -> Twhere
T: SampleUniform,
R: SampleRange<T>,
Renamed to random_range
Rng::random_range.impl<R> TryCryptoRng for R
Source§impl<R> TryRngCore for R
impl<R> TryRngCore for R
Source§fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>
u32.Source§fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>
u64.Source§fn try_fill_bytes(
&mut self,
dst: &mut [u8],
) -> Result<(), <R as TryRngCore>::Error>
fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>
dest entirely with random data.Source§fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>
UnwrapMut wrapper.Source§fn read_adapter(&mut self) -> RngReadAdapter<'_, Self> ⓘwhere
Self: Sized,
fn read_adapter(&mut self) -> RngReadAdapter<'_, Self> ⓘwhere
Self: Sized,
RngCore to a RngReadAdapter.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<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> ⓘ
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.