Remove in_band_lifetimes from rustc_codegen_llvm

See #91867 for more information.
This commit is contained in:
LegionMammal978 2021-12-14 13:49:49 -05:00 committed by Matthew House
parent 1d01550f7e
commit 4937a55dfb
28 changed files with 429 additions and 392 deletions

View file

@ -136,11 +136,11 @@ impl ArgAttributesExt for ArgAttributes {
} }
pub trait LlvmType { pub trait LlvmType {
fn llvm_type(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type; fn llvm_type<'ll>(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type;
} }
impl LlvmType for Reg { impl LlvmType for Reg {
fn llvm_type(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type { fn llvm_type<'ll>(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type {
match self.kind { match self.kind {
RegKind::Integer => cx.type_ix(self.size.bits()), RegKind::Integer => cx.type_ix(self.size.bits()),
RegKind::Float => match self.size.bits() { RegKind::Float => match self.size.bits() {
@ -154,7 +154,7 @@ impl LlvmType for Reg {
} }
impl LlvmType for CastTarget { impl LlvmType for CastTarget {
fn llvm_type(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type { fn llvm_type<'ll>(&self, cx: &CodegenCx<'ll, '_>) -> &'ll Type {
let rest_ll_unit = self.rest.unit.llvm_type(cx); let rest_ll_unit = self.rest.unit.llvm_type(cx);
let (rest_count, rem_bytes) = if self.rest.unit.size.bytes() == 0 { let (rest_count, rem_bytes) = if self.rest.unit.size.bytes() == 0 {
(0, 0) (0, 0)
@ -212,7 +212,7 @@ pub trait ArgAbiExt<'ll, 'tcx> {
); );
} }
impl ArgAbiExt<'ll, 'tcx> for ArgAbi<'tcx, Ty<'tcx>> { impl<'ll, 'tcx> ArgAbiExt<'ll, 'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
/// Gets the LLVM type for a place of the original Rust type of /// Gets the LLVM type for a place of the original Rust type of
/// this argument/return, i.e., the result of `type_of::type_of`. /// this argument/return, i.e., the result of `type_of::type_of`.
fn memory_ty(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type { fn memory_ty(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type {
@ -287,7 +287,7 @@ impl ArgAbiExt<'ll, 'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
fn store_fn_arg( fn store_fn_arg(
&self, &self,
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
idx: &mut usize, idx: &mut usize,
dst: PlaceRef<'tcx, &'ll Value>, dst: PlaceRef<'tcx, &'ll Value>,
) { ) {
@ -314,7 +314,7 @@ impl ArgAbiExt<'ll, 'tcx> for ArgAbi<'tcx, Ty<'tcx>> {
} }
} }
impl ArgAbiMethods<'tcx> for Builder<'a, 'll, 'tcx> { impl<'ll, 'tcx> ArgAbiMethods<'tcx> for Builder<'_, 'll, 'tcx> {
fn store_fn_arg( fn store_fn_arg(
&mut self, &mut self,
arg_abi: &ArgAbi<'tcx, Ty<'tcx>>, arg_abi: &ArgAbi<'tcx, Ty<'tcx>>,
@ -336,15 +336,15 @@ impl ArgAbiMethods<'tcx> for Builder<'a, 'll, 'tcx> {
} }
} }
pub trait FnAbiLlvmExt<'tcx> { pub trait FnAbiLlvmExt<'ll, 'tcx> {
fn llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type; fn llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type;
fn ptr_to_llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type; fn ptr_to_llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type;
fn llvm_cconv(&self) -> llvm::CallConv; fn llvm_cconv(&self) -> llvm::CallConv;
fn apply_attrs_llfn(&self, cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value); fn apply_attrs_llfn(&self, cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value);
fn apply_attrs_callsite(&self, bx: &mut Builder<'a, 'll, 'tcx>, callsite: &'ll Value); fn apply_attrs_callsite(&self, bx: &mut Builder<'_, 'll, 'tcx>, callsite: &'ll Value);
} }
impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> { impl<'ll, 'tcx> FnAbiLlvmExt<'ll, 'tcx> for FnAbi<'tcx, Ty<'tcx>> {
fn llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type { fn llvm_type(&self, cx: &CodegenCx<'ll, 'tcx>) -> &'ll Type {
// Ignore "extra" args from the call site for C variadic functions. // Ignore "extra" args from the call site for C variadic functions.
// Only the "fixed" args are part of the LLVM function signature. // Only the "fixed" args are part of the LLVM function signature.
@ -505,7 +505,7 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> {
} }
} }
fn apply_attrs_callsite(&self, bx: &mut Builder<'a, 'll, 'tcx>, callsite: &'ll Value) { fn apply_attrs_callsite(&self, bx: &mut Builder<'_, 'll, 'tcx>, callsite: &'ll Value) {
if self.ret.layout.abi.is_uninhabited() { if self.ret.layout.abi.is_uninhabited() {
llvm::Attribute::NoReturn.apply_callsite(llvm::AttributePlace::Function, callsite); llvm::Attribute::NoReturn.apply_callsite(llvm::AttributePlace::Function, callsite);
} }
@ -610,7 +610,7 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> {
} }
} }
impl AbiBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> { impl<'tcx> AbiBuilderMethods<'tcx> for Builder<'_, '_, 'tcx> {
fn apply_attrs_callsite(&mut self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, callsite: Self::Value) { fn apply_attrs_callsite(&mut self, fn_abi: &FnAbi<'tcx, Ty<'tcx>>, callsite: Self::Value) {
fn_abi.apply_attrs_callsite(self, callsite) fn_abi.apply_attrs_callsite(self, callsite)
} }

View file

@ -23,7 +23,7 @@ use rustc_target::asm::*;
use libc::{c_char, c_uint}; use libc::{c_char, c_uint};
use tracing::debug; use tracing::debug;
impl AsmBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> { impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
fn codegen_llvm_inline_asm( fn codegen_llvm_inline_asm(
&mut self, &mut self,
ia: &hir::LlvmInlineAsmInner, ia: &hir::LlvmInlineAsmInner,
@ -399,7 +399,7 @@ impl AsmBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> {
} }
} }
impl AsmMethods for CodegenCx<'ll, 'tcx> { impl AsmMethods for CodegenCx<'_, '_> {
fn codegen_global_asm( fn codegen_global_asm(
&self, &self,
template: &[InlineAsmTemplatePiece], template: &[InlineAsmTemplatePiece],
@ -447,8 +447,8 @@ impl AsmMethods for CodegenCx<'ll, 'tcx> {
} }
} }
pub(crate) fn inline_asm_call( pub(crate) fn inline_asm_call<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
asm: &str, asm: &str,
cons: &str, cons: &str,
inputs: &[&'ll Value], inputs: &[&'ll Value],
@ -583,7 +583,7 @@ fn a64_vreg_index(reg: InlineAsmReg) -> Option<u32> {
} }
/// Converts a register class to an LLVM constraint code. /// Converts a register class to an LLVM constraint code.
fn reg_to_llvm(reg: InlineAsmRegOrRegClass, layout: Option<&TyAndLayout<'tcx>>) -> String { fn reg_to_llvm(reg: InlineAsmRegOrRegClass, layout: Option<&TyAndLayout<'_>>) -> String {
match reg { match reg {
// For vector registers LLVM wants the register name to match the type size. // For vector registers LLVM wants the register name to match the type size.
InlineAsmRegOrRegClass::Reg(reg) => { InlineAsmRegOrRegClass::Reg(reg) => {
@ -773,7 +773,7 @@ fn modifier_to_llvm(
/// Type to use for outputs that are discarded. It doesn't really matter what /// Type to use for outputs that are discarded. It doesn't really matter what
/// the type is, as long as it is valid for the constraint code. /// the type is, as long as it is valid for the constraint code.
fn dummy_output_type(cx: &CodegenCx<'ll, 'tcx>, reg: InlineAsmRegClass) -> &'ll Type { fn dummy_output_type<'ll>(cx: &CodegenCx<'ll, '_>, reg: InlineAsmRegClass) -> &'ll Type {
match reg { match reg {
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::reg) => cx.type_i32(), InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::reg) => cx.type_i32(),
InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::vreg) InlineAsmRegClass::AArch64(AArch64InlineAsmRegClass::vreg)
@ -841,7 +841,7 @@ fn dummy_output_type(cx: &CodegenCx<'ll, 'tcx>, reg: InlineAsmRegClass) -> &'ll
/// Helper function to get the LLVM type for a Scalar. Pointers are returned as /// Helper function to get the LLVM type for a Scalar. Pointers are returned as
/// the equivalent integer type. /// the equivalent integer type.
fn llvm_asm_scalar_type(cx: &CodegenCx<'ll, 'tcx>, scalar: Scalar) -> &'ll Type { fn llvm_asm_scalar_type<'ll>(cx: &CodegenCx<'ll, '_>, scalar: Scalar) -> &'ll Type {
match scalar.value { match scalar.value {
Primitive::Int(Integer::I8, _) => cx.type_i8(), Primitive::Int(Integer::I8, _) => cx.type_i8(),
Primitive::Int(Integer::I16, _) => cx.type_i16(), Primitive::Int(Integer::I16, _) => cx.type_i16(),
@ -855,8 +855,8 @@ fn llvm_asm_scalar_type(cx: &CodegenCx<'ll, 'tcx>, scalar: Scalar) -> &'ll Type
} }
/// Fix up an input value to work around LLVM bugs. /// Fix up an input value to work around LLVM bugs.
fn llvm_fixup_input( fn llvm_fixup_input<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
mut value: &'ll Value, mut value: &'ll Value,
reg: InlineAsmRegClass, reg: InlineAsmRegClass,
layout: &TyAndLayout<'tcx>, layout: &TyAndLayout<'tcx>,
@ -933,8 +933,8 @@ fn llvm_fixup_input(
} }
/// Fix up an output value to work around LLVM bugs. /// Fix up an output value to work around LLVM bugs.
fn llvm_fixup_output( fn llvm_fixup_output<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
mut value: &'ll Value, mut value: &'ll Value,
reg: InlineAsmRegClass, reg: InlineAsmRegClass,
layout: &TyAndLayout<'tcx>, layout: &TyAndLayout<'tcx>,
@ -1009,7 +1009,7 @@ fn llvm_fixup_output(
} }
/// Output type to use for llvm_fixup_output. /// Output type to use for llvm_fixup_output.
fn llvm_fixup_output_type( fn llvm_fixup_output_type<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
reg: InlineAsmRegClass, reg: InlineAsmRegClass,
layout: &TyAndLayout<'tcx>, layout: &TyAndLayout<'tcx>,

View file

@ -25,7 +25,7 @@ use crate::value::Value;
/// Mark LLVM function to use provided inline heuristic. /// Mark LLVM function to use provided inline heuristic.
#[inline] #[inline]
fn inline(cx: &CodegenCx<'ll, '_>, val: &'ll Value, inline: InlineAttr) { fn inline<'ll>(cx: &CodegenCx<'ll, '_>, val: &'ll Value, inline: InlineAttr) {
use self::InlineAttr::*; use self::InlineAttr::*;
match inline { match inline {
Hint => Attribute::InlineHint.apply_llfn(Function, val), Hint => Attribute::InlineHint.apply_llfn(Function, val),
@ -41,7 +41,7 @@ fn inline(cx: &CodegenCx<'ll, '_>, val: &'ll Value, inline: InlineAttr) {
/// Apply LLVM sanitize attributes. /// Apply LLVM sanitize attributes.
#[inline] #[inline]
pub fn sanitize(cx: &CodegenCx<'ll, '_>, no_sanitize: SanitizerSet, llfn: &'ll Value) { pub fn sanitize<'ll>(cx: &CodegenCx<'ll, '_>, no_sanitize: SanitizerSet, llfn: &'ll Value) {
let enabled = cx.tcx.sess.opts.debugging_opts.sanitizer - no_sanitize; let enabled = cx.tcx.sess.opts.debugging_opts.sanitizer - no_sanitize;
if enabled.contains(SanitizerSet::ADDRESS) { if enabled.contains(SanitizerSet::ADDRESS) {
llvm::Attribute::SanitizeAddress.apply_llfn(Function, llfn); llvm::Attribute::SanitizeAddress.apply_llfn(Function, llfn);
@ -59,17 +59,17 @@ pub fn sanitize(cx: &CodegenCx<'ll, '_>, no_sanitize: SanitizerSet, llfn: &'ll V
/// Tell LLVM to emit or not emit the information necessary to unwind the stack for the function. /// Tell LLVM to emit or not emit the information necessary to unwind the stack for the function.
#[inline] #[inline]
pub fn emit_uwtable(val: &'ll Value, emit: bool) { pub fn emit_uwtable(val: &Value, emit: bool) {
Attribute::UWTable.toggle_llfn(Function, val, emit); Attribute::UWTable.toggle_llfn(Function, val, emit);
} }
/// Tell LLVM if this function should be 'naked', i.e., skip the epilogue and prologue. /// Tell LLVM if this function should be 'naked', i.e., skip the epilogue and prologue.
#[inline] #[inline]
fn naked(val: &'ll Value, is_naked: bool) { fn naked(val: &Value, is_naked: bool) {
Attribute::Naked.toggle_llfn(Function, val, is_naked); Attribute::Naked.toggle_llfn(Function, val, is_naked);
} }
pub fn set_frame_pointer_type(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { pub fn set_frame_pointer_type<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
let mut fp = cx.sess().target.frame_pointer; let mut fp = cx.sess().target.frame_pointer;
// "mcount" function relies on stack pointer. // "mcount" function relies on stack pointer.
// See <https://sourceware.org/binutils/docs/gprof/Implementation.html>. // See <https://sourceware.org/binutils/docs/gprof/Implementation.html>.
@ -92,7 +92,7 @@ pub fn set_frame_pointer_type(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
/// Tell LLVM what instrument function to insert. /// Tell LLVM what instrument function to insert.
#[inline] #[inline]
fn set_instrument_function(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { fn set_instrument_function<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
if cx.sess().instrument_mcount() { if cx.sess().instrument_mcount() {
// Similar to `clang -pg` behavior. Handled by the // Similar to `clang -pg` behavior. Handled by the
// `post-inline-ee-instrument` LLVM pass. // `post-inline-ee-instrument` LLVM pass.
@ -110,7 +110,7 @@ fn set_instrument_function(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
} }
} }
fn set_probestack(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { fn set_probestack<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
// Currently stack probes seem somewhat incompatible with the address // Currently stack probes seem somewhat incompatible with the address
// sanitizer and thread sanitizer. With asan we're already protected from // sanitizer and thread sanitizer. With asan we're already protected from
// stack overflow anyway so we don't really need stack probes regardless. // stack overflow anyway so we don't really need stack probes regardless.
@ -161,7 +161,7 @@ fn set_probestack(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
} }
} }
fn set_stackprotector(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { fn set_stackprotector<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
let sspattr = match cx.sess().stack_protector() { let sspattr = match cx.sess().stack_protector() {
StackProtector::None => return, StackProtector::None => return,
StackProtector::All => Attribute::StackProtectReq, StackProtector::All => Attribute::StackProtectReq,
@ -172,7 +172,7 @@ fn set_stackprotector(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
sspattr.apply_llfn(Function, llfn) sspattr.apply_llfn(Function, llfn)
} }
pub fn apply_target_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { pub fn apply_target_cpu_attr<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
let target_cpu = SmallCStr::new(llvm_util::target_cpu(cx.tcx.sess)); let target_cpu = SmallCStr::new(llvm_util::target_cpu(cx.tcx.sess));
llvm::AddFunctionAttrStringValue( llvm::AddFunctionAttrStringValue(
llfn, llfn,
@ -182,7 +182,7 @@ pub fn apply_target_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
); );
} }
pub fn apply_tune_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) { pub fn apply_tune_cpu_attr<'ll>(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
if let Some(tune) = llvm_util::tune_cpu(cx.tcx.sess) { if let Some(tune) = llvm_util::tune_cpu(cx.tcx.sess) {
let tune_cpu = SmallCStr::new(tune); let tune_cpu = SmallCStr::new(tune);
llvm::AddFunctionAttrStringValue( llvm::AddFunctionAttrStringValue(
@ -196,14 +196,14 @@ pub fn apply_tune_cpu_attr(cx: &CodegenCx<'ll, '_>, llfn: &'ll Value) {
/// Sets the `NonLazyBind` LLVM attribute on a given function, /// Sets the `NonLazyBind` LLVM attribute on a given function,
/// assuming the codegen options allow skipping the PLT. /// assuming the codegen options allow skipping the PLT.
pub fn non_lazy_bind(sess: &Session, llfn: &'ll Value) { pub fn non_lazy_bind<'ll>(sess: &Session, llfn: &'ll Value) {
// Don't generate calls through PLT if it's not necessary // Don't generate calls through PLT if it's not necessary
if !sess.needs_plt() { if !sess.needs_plt() {
Attribute::NonLazyBind.apply_llfn(Function, llfn); Attribute::NonLazyBind.apply_llfn(Function, llfn);
} }
} }
pub(crate) fn default_optimisation_attrs(sess: &Session, llfn: &'ll Value) { pub(crate) fn default_optimisation_attrs<'ll>(sess: &Session, llfn: &'ll Value) {
match sess.opts.optimize { match sess.opts.optimize {
OptLevel::Size => { OptLevel::Size => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn); llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
@ -226,7 +226,11 @@ pub(crate) fn default_optimisation_attrs(sess: &Session, llfn: &'ll Value) {
/// Composite function which sets LLVM attributes for function depending on its AST (`#[attribute]`) /// Composite function which sets LLVM attributes for function depending on its AST (`#[attribute]`)
/// attributes. /// attributes.
pub fn from_fn_attrs(cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value, instance: ty::Instance<'tcx>) { pub fn from_fn_attrs<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>,
llfn: &'ll Value,
instance: ty::Instance<'tcx>,
) {
let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(instance.def_id()); let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(instance.def_id());
match codegen_fn_attrs.optimize { match codegen_fn_attrs.optimize {

View file

@ -363,7 +363,7 @@ fn fat_lto(
crate struct Linker<'a>(&'a mut llvm::Linker<'a>); crate struct Linker<'a>(&'a mut llvm::Linker<'a>);
impl Linker<'a> { impl<'a> Linker<'a> {
crate fn new(llmod: &'a llvm::Module) -> Self { crate fn new(llmod: &'a llvm::Module) -> Self {
unsafe { Linker(llvm::LLVMRustLinkerNew(llmod)) } unsafe { Linker(llvm::LLVMRustLinkerNew(llmod)) }
} }
@ -383,7 +383,7 @@ impl Linker<'a> {
} }
} }
impl Drop for Linker<'a> { impl Drop for Linker<'_> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
llvm::LLVMRustLinkerFree(&mut *(self.0 as *mut _)); llvm::LLVMRustLinkerFree(&mut *(self.0 as *mut _));

View file

@ -46,7 +46,7 @@ pub fn llvm_err(handler: &rustc_errors::Handler, msg: &str) -> FatalError {
} }
} }
pub fn write_output_file( pub fn write_output_file<'ll>(
handler: &rustc_errors::Handler, handler: &rustc_errors::Handler,
target: &'ll llvm::TargetMachine, target: &'ll llvm::TargetMachine,
pm: &llvm::PassManager<'ll>, pm: &llvm::PassManager<'ll>,

View file

@ -39,7 +39,7 @@ pub struct ValueIter<'ll> {
step: unsafe extern "C" fn(&'ll Value) -> Option<&'ll Value>, step: unsafe extern "C" fn(&'ll Value) -> Option<&'ll Value>,
} }
impl Iterator for ValueIter<'ll> { impl<'ll> Iterator for ValueIter<'ll> {
type Item = &'ll Value; type Item = &'ll Value;
fn next(&mut self) -> Option<&'ll Value> { fn next(&mut self) -> Option<&'ll Value> {
@ -51,14 +51,11 @@ impl Iterator for ValueIter<'ll> {
} }
} }
pub fn iter_globals(llmod: &'ll llvm::Module) -> ValueIter<'ll> { pub fn iter_globals(llmod: &llvm::Module) -> ValueIter<'_> {
unsafe { ValueIter { cur: llvm::LLVMGetFirstGlobal(llmod), step: llvm::LLVMGetNextGlobal } } unsafe { ValueIter { cur: llvm::LLVMGetFirstGlobal(llmod), step: llvm::LLVMGetNextGlobal } }
} }
pub fn compile_codegen_unit( pub fn compile_codegen_unit(tcx: TyCtxt<'_>, cgu_name: Symbol) -> (ModuleCodegen<ModuleLlvm>, u64) {
tcx: TyCtxt<'tcx>,
cgu_name: Symbol,
) -> (ModuleCodegen<ModuleLlvm>, u64) {
let start_time = Instant::now(); let start_time = Instant::now();
let dep_node = tcx.codegen_unit(cgu_name).codegen_dep_node(tcx); let dep_node = tcx.codegen_unit(cgu_name).codegen_dep_node(tcx);

View file

@ -36,7 +36,7 @@ pub struct Builder<'a, 'll, 'tcx> {
pub cx: &'a CodegenCx<'ll, 'tcx>, pub cx: &'a CodegenCx<'ll, 'tcx>,
} }
impl Drop for Builder<'a, 'll, 'tcx> { impl Drop for Builder<'_, '_, '_> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
llvm::LLVMDisposeBuilder(&mut *(self.llbuilder as *mut _)); llvm::LLVMDisposeBuilder(&mut *(self.llbuilder as *mut _));
@ -52,7 +52,7 @@ const EMPTY_C_STR: &CStr = unsafe { CStr::from_bytes_with_nul_unchecked(b"\0") }
// FIXME(eddyb) pass `&CStr` directly to FFI once it's a thin pointer. // FIXME(eddyb) pass `&CStr` directly to FFI once it's a thin pointer.
const UNNAMED: *const c_char = EMPTY_C_STR.as_ptr(); const UNNAMED: *const c_char = EMPTY_C_STR.as_ptr();
impl BackendTypes for Builder<'_, 'll, 'tcx> { impl<'ll, 'tcx> BackendTypes for Builder<'_, 'll, 'tcx> {
type Value = <CodegenCx<'ll, 'tcx> as BackendTypes>::Value; type Value = <CodegenCx<'ll, 'tcx> as BackendTypes>::Value;
type Function = <CodegenCx<'ll, 'tcx> as BackendTypes>::Function; type Function = <CodegenCx<'ll, 'tcx> as BackendTypes>::Function;
type BasicBlock = <CodegenCx<'ll, 'tcx> as BackendTypes>::BasicBlock; type BasicBlock = <CodegenCx<'ll, 'tcx> as BackendTypes>::BasicBlock;
@ -70,27 +70,27 @@ impl abi::HasDataLayout for Builder<'_, '_, '_> {
} }
} }
impl ty::layout::HasTyCtxt<'tcx> for Builder<'_, '_, 'tcx> { impl<'tcx> ty::layout::HasTyCtxt<'tcx> for Builder<'_, '_, 'tcx> {
#[inline] #[inline]
fn tcx(&self) -> TyCtxt<'tcx> { fn tcx(&self) -> TyCtxt<'tcx> {
self.cx.tcx self.cx.tcx
} }
} }
impl ty::layout::HasParamEnv<'tcx> for Builder<'_, '_, 'tcx> { impl<'tcx> ty::layout::HasParamEnv<'tcx> for Builder<'_, '_, 'tcx> {
fn param_env(&self) -> ty::ParamEnv<'tcx> { fn param_env(&self) -> ty::ParamEnv<'tcx> {
self.cx.param_env() self.cx.param_env()
} }
} }
impl HasTargetSpec for Builder<'_, '_, 'tcx> { impl HasTargetSpec for Builder<'_, '_, '_> {
#[inline] #[inline]
fn target_spec(&self) -> &Target { fn target_spec(&self) -> &Target {
self.cx.target_spec() self.cx.target_spec()
} }
} }
impl LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx> { impl<'tcx> LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
type LayoutOfResult = TyAndLayout<'tcx>; type LayoutOfResult = TyAndLayout<'tcx>;
#[inline] #[inline]
@ -99,7 +99,7 @@ impl LayoutOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
} }
} }
impl FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx> { impl<'tcx> FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>; type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
#[inline] #[inline]
@ -113,7 +113,7 @@ impl FnAbiOfHelpers<'tcx> for Builder<'_, '_, 'tcx> {
} }
} }
impl Deref for Builder<'_, 'll, 'tcx> { impl<'ll, 'tcx> Deref for Builder<'_, 'll, 'tcx> {
type Target = CodegenCx<'ll, 'tcx>; type Target = CodegenCx<'ll, 'tcx>;
#[inline] #[inline]
@ -122,7 +122,7 @@ impl Deref for Builder<'_, 'll, 'tcx> {
} }
} }
impl HasCodegen<'tcx> for Builder<'_, 'll, 'tcx> { impl<'ll, 'tcx> HasCodegen<'tcx> for Builder<'_, 'll, 'tcx> {
type CodegenCx = CodegenCx<'ll, 'tcx>; type CodegenCx = CodegenCx<'ll, 'tcx>;
} }
@ -136,7 +136,7 @@ macro_rules! builder_methods_for_value_instructions {
} }
} }
impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
fn build(cx: &'a CodegenCx<'ll, 'tcx>, llbb: &'ll BasicBlock) -> Self { fn build(cx: &'a CodegenCx<'ll, 'tcx>, llbb: &'ll BasicBlock) -> Self {
let bx = Builder::with_cx(cx); let bx = Builder::with_cx(cx);
unsafe { unsafe {
@ -1206,14 +1206,14 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
} }
} }
impl StaticBuilderMethods for Builder<'a, 'll, 'tcx> { impl<'ll> StaticBuilderMethods for Builder<'_, 'll, '_> {
fn get_static(&mut self, def_id: DefId) -> &'ll Value { fn get_static(&mut self, def_id: DefId) -> &'ll Value {
// Forward to the `get_static` method of `CodegenCx` // Forward to the `get_static` method of `CodegenCx`
self.cx().get_static(def_id) self.cx().get_static(def_id)
} }
} }
impl Builder<'a, 'll, 'tcx> { impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
fn with_cx(cx: &'a CodegenCx<'ll, 'tcx>) -> Self { fn with_cx(cx: &'a CodegenCx<'ll, 'tcx>) -> Self {
// Create a fresh builder from the crate context. // Create a fresh builder from the crate context.
let llbuilder = unsafe { llvm::LLVMCreateBuilderInContext(cx.llcx) }; let llbuilder = unsafe { llvm::LLVMCreateBuilderInContext(cx.llcx) };

View file

@ -22,7 +22,7 @@ use rustc_middle::ty::{self, Instance, TypeFoldable};
/// ///
/// - `cx`: the crate context /// - `cx`: the crate context
/// - `instance`: the instance to be instantiated /// - `instance`: the instance to be instantiated
pub fn get_fn(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'tcx>) -> &'ll Value { pub fn get_fn<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'tcx>) -> &'ll Value {
let tcx = cx.tcx(); let tcx = cx.tcx();
debug!("get_fn(instance={:?})", instance); debug!("get_fn(instance={:?})", instance);

View file

@ -65,7 +65,7 @@ pub struct Funclet<'ll> {
operand: OperandBundleDef<'ll>, operand: OperandBundleDef<'ll>,
} }
impl Funclet<'ll> { impl<'ll> Funclet<'ll> {
pub fn new(cleanuppad: &'ll Value) -> Self { pub fn new(cleanuppad: &'ll Value) -> Self {
Funclet { cleanuppad, operand: OperandBundleDef::new("funclet", &[cleanuppad]) } Funclet { cleanuppad, operand: OperandBundleDef::new("funclet", &[cleanuppad]) }
} }
@ -79,7 +79,7 @@ impl Funclet<'ll> {
} }
} }
impl BackendTypes for CodegenCx<'ll, 'tcx> { impl<'ll> BackendTypes for CodegenCx<'ll, '_> {
type Value = &'ll Value; type Value = &'ll Value;
// FIXME(eddyb) replace this with a `Function` "subclass" of `Value`. // FIXME(eddyb) replace this with a `Function` "subclass" of `Value`.
type Function = &'ll Value; type Function = &'ll Value;
@ -93,7 +93,7 @@ impl BackendTypes for CodegenCx<'ll, 'tcx> {
type DIVariable = &'ll llvm::debuginfo::DIVariable; type DIVariable = &'ll llvm::debuginfo::DIVariable;
} }
impl CodegenCx<'ll, 'tcx> { impl<'ll> CodegenCx<'ll, '_> {
pub fn const_array(&self, ty: &'ll Type, elts: &[&'ll Value]) -> &'ll Value { pub fn const_array(&self, ty: &'ll Type, elts: &[&'ll Value]) -> &'ll Value {
unsafe { llvm::LLVMConstArray(ty, elts.as_ptr(), elts.len() as c_uint) } unsafe { llvm::LLVMConstArray(ty, elts.as_ptr(), elts.len() as c_uint) }
} }
@ -145,7 +145,7 @@ impl CodegenCx<'ll, 'tcx> {
} }
} }
impl ConstMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> ConstMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn const_null(&self, t: &'ll Type) -> &'ll Value { fn const_null(&self, t: &'ll Type) -> &'ll Value {
unsafe { llvm::LLVMConstNull(t) } unsafe { llvm::LLVMConstNull(t) }
} }
@ -327,14 +327,18 @@ pub fn val_ty(v: &Value) -> &Type {
unsafe { llvm::LLVMTypeOf(v) } unsafe { llvm::LLVMTypeOf(v) }
} }
pub fn bytes_in_context(llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value { pub fn bytes_in_context<'ll>(llcx: &'ll llvm::Context, bytes: &[u8]) -> &'ll Value {
unsafe { unsafe {
let ptr = bytes.as_ptr() as *const c_char; let ptr = bytes.as_ptr() as *const c_char;
llvm::LLVMConstStringInContext(llcx, ptr, bytes.len() as c_uint, True) llvm::LLVMConstStringInContext(llcx, ptr, bytes.len() as c_uint, True)
} }
} }
pub fn struct_in_context(llcx: &'a llvm::Context, elts: &[&'a Value], packed: bool) -> &'a Value { pub fn struct_in_context<'ll>(
llcx: &'ll llvm::Context,
elts: &[&'ll Value],
packed: bool,
) -> &'ll Value {
unsafe { unsafe {
llvm::LLVMConstStructInContext(llcx, elts.as_ptr(), elts.len() as c_uint, packed as Bool) llvm::LLVMConstStructInContext(llcx, elts.as_ptr(), elts.len() as c_uint, packed as Bool)
} }

View file

@ -24,7 +24,7 @@ use rustc_target::abi::{
use std::ops::Range; use std::ops::Range;
use tracing::debug; use tracing::debug;
pub fn const_alloc_to_llvm(cx: &CodegenCx<'ll, '_>, alloc: &Allocation) -> &'ll Value { pub fn const_alloc_to_llvm<'ll>(cx: &CodegenCx<'ll, '_>, alloc: &Allocation) -> &'ll Value {
let mut llvals = Vec::with_capacity(alloc.relocations().len() + 1); let mut llvals = Vec::with_capacity(alloc.relocations().len() + 1);
let dl = cx.data_layout(); let dl = cx.data_layout();
let pointer_size = dl.pointer_size.bytes() as usize; let pointer_size = dl.pointer_size.bytes() as usize;
@ -127,7 +127,7 @@ pub fn const_alloc_to_llvm(cx: &CodegenCx<'ll, '_>, alloc: &Allocation) -> &'ll
cx.const_struct(&llvals, true) cx.const_struct(&llvals, true)
} }
pub fn codegen_static_initializer( pub fn codegen_static_initializer<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
def_id: DefId, def_id: DefId,
) -> Result<(&'ll Value, &'tcx Allocation), ErrorHandled> { ) -> Result<(&'ll Value, &'tcx Allocation), ErrorHandled> {
@ -135,7 +135,7 @@ pub fn codegen_static_initializer(
Ok((const_alloc_to_llvm(cx, alloc), alloc)) Ok((const_alloc_to_llvm(cx, alloc), alloc))
} }
fn set_global_alignment(cx: &CodegenCx<'ll, '_>, gv: &'ll Value, mut align: Align) { fn set_global_alignment<'ll>(cx: &CodegenCx<'ll, '_>, gv: &'ll Value, mut align: Align) {
// The target may require greater alignment for globals than the type does. // The target may require greater alignment for globals than the type does.
// Note: GCC and Clang also allow `__attribute__((aligned))` on variables, // Note: GCC and Clang also allow `__attribute__((aligned))` on variables,
// which can force it to be smaller. Rust doesn't support this yet. // which can force it to be smaller. Rust doesn't support this yet.
@ -152,7 +152,7 @@ fn set_global_alignment(cx: &CodegenCx<'ll, '_>, gv: &'ll Value, mut align: Alig
} }
} }
fn check_and_apply_linkage( fn check_and_apply_linkage<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
attrs: &CodegenFnAttrs, attrs: &CodegenFnAttrs,
ty: Ty<'tcx>, ty: Ty<'tcx>,
@ -206,11 +206,11 @@ fn check_and_apply_linkage(
} }
} }
pub fn ptrcast(val: &'ll Value, ty: &'ll Type) -> &'ll Value { pub fn ptrcast<'ll>(val: &'ll Value, ty: &'ll Type) -> &'ll Value {
unsafe { llvm::LLVMConstPointerCast(val, ty) } unsafe { llvm::LLVMConstPointerCast(val, ty) }
} }
impl CodegenCx<'ll, 'tcx> { impl<'ll> CodegenCx<'ll, '_> {
crate fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value { crate fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value {
unsafe { llvm::LLVMConstBitCast(val, ty) } unsafe { llvm::LLVMConstBitCast(val, ty) }
} }
@ -344,7 +344,7 @@ impl CodegenCx<'ll, 'tcx> {
} }
} }
impl StaticMethods for CodegenCx<'ll, 'tcx> { impl<'ll> StaticMethods for CodegenCx<'ll, '_> {
fn static_addr_of(&self, cv: &'ll Value, align: Align, kind: Option<&str>) -> &'ll Value { fn static_addr_of(&self, cv: &'ll Value, align: Align, kind: Option<&str>) -> &'ll Value {
if let Some(&gv) = self.const_globals.borrow().get(&cv) { if let Some(&gv) = self.const_globals.borrow().get(&cv) {
unsafe { unsafe {

View file

@ -124,7 +124,7 @@ fn to_llvm_tls_model(tls_model: TlsModel) -> llvm::ThreadLocalMode {
} }
} }
pub unsafe fn create_module( pub unsafe fn create_module<'ll>(
tcx: TyCtxt<'_>, tcx: TyCtxt<'_>,
llcx: &'ll llvm::Context, llcx: &'ll llvm::Context,
mod_name: &str, mod_name: &str,
@ -363,7 +363,7 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
} }
#[inline] #[inline]
pub fn coverage_context(&'a self) -> Option<&'a coverageinfo::CrateCoverageContext<'ll, 'tcx>> { pub fn coverage_context(&self) -> Option<&coverageinfo::CrateCoverageContext<'ll, 'tcx>> {
self.coverage_cx.as_ref() self.coverage_cx.as_ref()
} }
@ -380,7 +380,7 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
} }
} }
impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn vtables( fn vtables(
&self, &self,
) -> &RefCell<FxHashMap<(Ty<'tcx>, Option<ty::PolyExistentialTraitRef<'tcx>>), &'ll Value>> ) -> &RefCell<FxHashMap<(Ty<'tcx>, Option<ty::PolyExistentialTraitRef<'tcx>>), &'ll Value>>
@ -504,8 +504,8 @@ impl MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
} }
} }
impl CodegenCx<'b, 'tcx> { impl<'ll> CodegenCx<'ll, '_> {
crate fn get_intrinsic(&self, key: &str) -> (&'b Type, &'b Value) { crate fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value) {
if let Some(v) = self.intrinsics.borrow().get(key).cloned() { if let Some(v) = self.intrinsics.borrow().get(key).cloned() {
return v; return v;
} }
@ -516,9 +516,9 @@ impl CodegenCx<'b, 'tcx> {
fn insert_intrinsic( fn insert_intrinsic(
&self, &self,
name: &'static str, name: &'static str,
args: Option<&[&'b llvm::Type]>, args: Option<&[&'ll llvm::Type]>,
ret: &'b llvm::Type, ret: &'ll llvm::Type,
) -> (&'b llvm::Type, &'b llvm::Value) { ) -> (&'ll llvm::Type, &'ll llvm::Value) {
let fn_ty = if let Some(args) = args { let fn_ty = if let Some(args) = args {
self.type_func(args, ret) self.type_func(args, ret)
} else { } else {
@ -529,7 +529,7 @@ impl CodegenCx<'b, 'tcx> {
(fn_ty, f) (fn_ty, f)
} }
fn declare_intrinsic(&self, key: &str) -> Option<(&'b Type, &'b Value)> { fn declare_intrinsic(&self, key: &str) -> Option<(&'ll Type, &'ll Value)> {
macro_rules! ifn { macro_rules! ifn {
($name:expr, fn() -> $ret:expr) => ( ($name:expr, fn() -> $ret:expr) => (
if key == $name { if key == $name {
@ -793,7 +793,7 @@ impl CodegenCx<'b, 'tcx> {
None None
} }
crate fn eh_catch_typeinfo(&self) -> &'b Value { crate fn eh_catch_typeinfo(&self) -> &'ll Value {
if let Some(eh_catch_typeinfo) = self.eh_catch_typeinfo.get() { if let Some(eh_catch_typeinfo) = self.eh_catch_typeinfo.get() {
return eh_catch_typeinfo; return eh_catch_typeinfo;
} }
@ -813,7 +813,7 @@ impl CodegenCx<'b, 'tcx> {
} }
} }
impl<'b, 'tcx> CodegenCx<'b, 'tcx> { impl CodegenCx<'_, '_> {
/// Generates a new symbol name with the given prefix. This symbol name must /// Generates a new symbol name with the given prefix. This symbol name must
/// only be used for definitions with `internal` or `private` linkage. /// only be used for definitions with `internal` or `private` linkage.
pub fn generate_local_symbol_name(&self, prefix: &str) -> String { pub fn generate_local_symbol_name(&self, prefix: &str) -> String {
@ -829,21 +829,21 @@ impl<'b, 'tcx> CodegenCx<'b, 'tcx> {
} }
} }
impl HasDataLayout for CodegenCx<'ll, 'tcx> { impl HasDataLayout for CodegenCx<'_, '_> {
#[inline] #[inline]
fn data_layout(&self) -> &TargetDataLayout { fn data_layout(&self) -> &TargetDataLayout {
&self.tcx.data_layout &self.tcx.data_layout
} }
} }
impl HasTargetSpec for CodegenCx<'ll, 'tcx> { impl HasTargetSpec for CodegenCx<'_, '_> {
#[inline] #[inline]
fn target_spec(&self) -> &Target { fn target_spec(&self) -> &Target {
&self.tcx.sess.target &self.tcx.sess.target
} }
} }
impl ty::layout::HasTyCtxt<'tcx> for CodegenCx<'ll, 'tcx> { impl<'tcx> ty::layout::HasTyCtxt<'tcx> for CodegenCx<'_, 'tcx> {
#[inline] #[inline]
fn tcx(&self) -> TyCtxt<'tcx> { fn tcx(&self) -> TyCtxt<'tcx> {
self.tcx self.tcx
@ -856,7 +856,7 @@ impl<'tcx, 'll> HasParamEnv<'tcx> for CodegenCx<'ll, 'tcx> {
} }
} }
impl LayoutOfHelpers<'tcx> for CodegenCx<'ll, 'tcx> { impl<'tcx> LayoutOfHelpers<'tcx> for CodegenCx<'_, 'tcx> {
type LayoutOfResult = TyAndLayout<'tcx>; type LayoutOfResult = TyAndLayout<'tcx>;
#[inline] #[inline]
@ -869,7 +869,7 @@ impl LayoutOfHelpers<'tcx> for CodegenCx<'ll, 'tcx> {
} }
} }
impl FnAbiOfHelpers<'tcx> for CodegenCx<'ll, 'tcx> { impl<'tcx> FnAbiOfHelpers<'tcx> for CodegenCx<'_, 'tcx> {
type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>; type FnAbiOfResult = &'tcx FnAbi<'tcx, Ty<'tcx>>;
#[inline] #[inline]

View file

@ -141,7 +141,7 @@ impl CoverageMapGenerator {
/// the `mapping_regions` and `virtual_file_mapping`, and capture any new filenames. Then use /// the `mapping_regions` and `virtual_file_mapping`, and capture any new filenames. Then use
/// LLVM APIs to encode the `virtual_file_mapping`, `expressions`, and `mapping_regions` into /// LLVM APIs to encode the `virtual_file_mapping`, `expressions`, and `mapping_regions` into
/// the given `coverage_mapping` byte buffer, compliant with the LLVM Coverage Mapping format. /// the given `coverage_mapping` byte buffer, compliant with the LLVM Coverage Mapping format.
fn write_coverage_mapping( fn write_coverage_mapping<'a>(
&mut self, &mut self,
expressions: Vec<CounterExpression>, expressions: Vec<CounterExpression>,
counter_regions: impl Iterator<Item = (Counter, &'a CodeRegion)>, counter_regions: impl Iterator<Item = (Counter, &'a CodeRegion)>,
@ -200,9 +200,9 @@ impl CoverageMapGenerator {
/// Construct coverage map header and the array of function records, and combine them into the /// Construct coverage map header and the array of function records, and combine them into the
/// coverage map. Save the coverage map data into the LLVM IR as a static global using a /// coverage map. Save the coverage map data into the LLVM IR as a static global using a
/// specific, well-known section and name. /// specific, well-known section and name.
fn generate_coverage_map( fn generate_coverage_map<'ll>(
self, self,
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, '_>,
version: u32, version: u32,
filenames_size: usize, filenames_size: usize,
filenames_val: &'ll llvm::Value, filenames_val: &'ll llvm::Value,
@ -229,7 +229,7 @@ impl CoverageMapGenerator {
/// Save the function record into the LLVM IR as a static global using a /// Save the function record into the LLVM IR as a static global using a
/// specific, well-known section and name. /// specific, well-known section and name.
fn save_function_record( fn save_function_record(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'_, '_>,
mangled_function_name: String, mangled_function_name: String,
source_hash: u64, source_hash: u64,
filenames_ref: u64, filenames_ref: u64,

View file

@ -56,7 +56,7 @@ impl<'ll, 'tcx> CrateCoverageContext<'ll, 'tcx> {
} }
} }
impl CoverageInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> CoverageInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn coverageinfo_finalize(&self) { fn coverageinfo_finalize(&self) {
mapgen::finalize(self) mapgen::finalize(self)
} }
@ -96,7 +96,7 @@ impl CoverageInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
} }
} }
impl CoverageInfoBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> { impl<'tcx> CoverageInfoBuilderMethods<'tcx> for Builder<'_, '_, 'tcx> {
fn set_function_source_hash( fn set_function_source_hash(
&mut self, &mut self,
instance: Instance<'tcx>, instance: Instance<'tcx>,
@ -184,7 +184,7 @@ impl CoverageInfoBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> {
} }
} }
fn declare_unused_fn(cx: &CodegenCx<'ll, 'tcx>, def_id: &DefId) -> Instance<'tcx> { fn declare_unused_fn<'tcx>(cx: &CodegenCx<'_, 'tcx>, def_id: &DefId) -> Instance<'tcx> {
let tcx = cx.tcx; let tcx = cx.tcx;
let instance = Instance::new( let instance = Instance::new(
@ -220,7 +220,7 @@ fn declare_unused_fn(cx: &CodegenCx<'ll, 'tcx>, def_id: &DefId) -> Instance<'tcx
instance instance
} }
fn codegen_unused_fn_and_counter(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'tcx>) { fn codegen_unused_fn_and_counter<'tcx>(cx: &CodegenCx<'_, 'tcx>, instance: Instance<'tcx>) {
let llfn = cx.get_fn(instance); let llfn = cx.get_fn(instance);
let llbb = Builder::append_block(cx, llfn, "unused_function"); let llbb = Builder::append_block(cx, llfn, "unused_function");
let mut bx = Builder::build(cx, llbb); let mut bx = Builder::build(cx, llbb);
@ -237,8 +237,8 @@ fn codegen_unused_fn_and_counter(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'
bx.ret_void(); bx.ret_void();
} }
fn add_unused_function_coverage( fn add_unused_function_coverage<'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'_, 'tcx>,
instance: Instance<'tcx>, instance: Instance<'tcx>,
def_id: DefId, def_id: DefId,
) { ) {
@ -268,7 +268,7 @@ fn add_unused_function_coverage(
/// required by LLVM InstrProf source-based coverage instrumentation. Use /// required by LLVM InstrProf source-based coverage instrumentation. Use
/// `bx.get_pgo_func_name_var()` to ensure the variable is only created once per /// `bx.get_pgo_func_name_var()` to ensure the variable is only created once per
/// `Instance`. /// `Instance`.
fn create_pgo_func_name_var( fn create_pgo_func_name_var<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
instance: Instance<'tcx>, instance: Instance<'tcx>,
) -> &'ll llvm::Value { ) -> &'ll llvm::Value {

View file

@ -16,7 +16,7 @@ use rustc_index::vec::Idx;
/// Produces DIScope DIEs for each MIR Scope which has variables defined in it. /// Produces DIScope DIEs for each MIR Scope which has variables defined in it.
// FIXME(eddyb) almost all of this should be in `rustc_codegen_ssa::mir::debuginfo`. // FIXME(eddyb) almost all of this should be in `rustc_codegen_ssa::mir::debuginfo`.
pub fn compute_mir_scopes( pub fn compute_mir_scopes<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
instance: Instance<'tcx>, instance: Instance<'tcx>,
mir: &Body<'tcx>, mir: &Body<'tcx>,
@ -45,7 +45,7 @@ pub fn compute_mir_scopes(
} }
} }
fn make_mir_scope( fn make_mir_scope<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
instance: Instance<'tcx>, instance: Instance<'tcx>,
mir: &Body<'tcx>, mir: &Body<'tcx>,

View file

@ -28,7 +28,7 @@ pub fn insert_reference_to_gdb_debug_scripts_section_global(bx: &mut Builder<'_,
/// Allocates the global variable responsible for the .debug_gdb_scripts binary /// Allocates the global variable responsible for the .debug_gdb_scripts binary
/// section. /// section.
pub fn get_or_insert_gdb_debug_scripts_section_global(cx: &CodegenCx<'ll, '_>) -> &'ll Value { pub fn get_or_insert_gdb_debug_scripts_section_global<'ll>(cx: &CodegenCx<'ll, '_>) -> &'ll Value {
let c_section_var_name = "__rustc_debug_gdb_scripts_section__\0"; let c_section_var_name = "__rustc_debug_gdb_scripts_section__\0";
let section_var_name = &c_section_var_name[..c_section_var_name.len() - 1]; let section_var_name = &c_section_var_name[..c_section_var_name.len() - 1];

View file

@ -155,7 +155,7 @@ pub struct TypeMap<'ll, 'tcx> {
type_to_unique_id: FxHashMap<Ty<'tcx>, UniqueTypeId>, type_to_unique_id: FxHashMap<Ty<'tcx>, UniqueTypeId>,
} }
impl TypeMap<'ll, 'tcx> { impl<'ll, 'tcx> TypeMap<'ll, 'tcx> {
/// Adds a Ty to metadata mapping to the TypeMap. The method will fail if /// Adds a Ty to metadata mapping to the TypeMap. The method will fail if
/// the mapping already exists. /// the mapping already exists.
fn register_type_with_metadata(&mut self, type_: Ty<'tcx>, metadata: &'ll DIType) { fn register_type_with_metadata(&mut self, type_: Ty<'tcx>, metadata: &'ll DIType) {
@ -291,7 +291,7 @@ enum RecursiveTypeDescription<'ll, 'tcx> {
FinalMetadata(&'ll DICompositeType), FinalMetadata(&'ll DICompositeType),
} }
fn create_and_register_recursive_type_forward_declaration( fn create_and_register_recursive_type_forward_declaration<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
unfinished_type: Ty<'tcx>, unfinished_type: Ty<'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
@ -313,7 +313,7 @@ fn create_and_register_recursive_type_forward_declaration(
} }
} }
impl RecursiveTypeDescription<'ll, 'tcx> { impl<'ll, 'tcx> RecursiveTypeDescription<'ll, 'tcx> {
/// Finishes up the description of the type in question (mostly by providing /// Finishes up the description of the type in question (mostly by providing
/// descriptions of the fields of the given type) and returns the final type /// descriptions of the fields of the given type) and returns the final type
/// metadata. /// metadata.
@ -375,7 +375,7 @@ macro_rules! return_if_metadata_created_in_meantime {
}; };
} }
fn fixed_vec_metadata( fn fixed_vec_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
array_or_slice_type: Ty<'tcx>, array_or_slice_type: Ty<'tcx>,
@ -410,7 +410,7 @@ fn fixed_vec_metadata(
MetadataCreationResult::new(metadata, false) MetadataCreationResult::new(metadata, false)
} }
fn vec_slice_metadata( fn vec_slice_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
slice_ptr_type: Ty<'tcx>, slice_ptr_type: Ty<'tcx>,
element_type: Ty<'tcx>, element_type: Ty<'tcx>,
@ -466,7 +466,7 @@ fn vec_slice_metadata(
MetadataCreationResult::new(metadata, false) MetadataCreationResult::new(metadata, false)
} }
fn subroutine_type_metadata( fn subroutine_type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
signature: ty::PolyFnSig<'tcx>, signature: ty::PolyFnSig<'tcx>,
@ -507,7 +507,7 @@ fn subroutine_type_metadata(
// `trait_type` should be the actual trait (e.g., `Trait`). Where the trait is part // `trait_type` should be the actual trait (e.g., `Trait`). Where the trait is part
// of a DST struct, there is no `trait_object_type` and the results of this // of a DST struct, there is no `trait_object_type` and the results of this
// function will be a little bit weird. // function will be a little bit weird.
fn trait_pointer_metadata( fn trait_pointer_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
trait_type: Ty<'tcx>, trait_type: Ty<'tcx>,
trait_object_type: Option<Ty<'tcx>>, trait_object_type: Option<Ty<'tcx>>,
@ -588,7 +588,11 @@ fn trait_pointer_metadata(
) )
} }
pub fn type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>, usage_site_span: Span) -> &'ll DIType { pub fn type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>,
t: Ty<'tcx>,
usage_site_span: Span,
) -> &'ll DIType {
// Get the unique type ID of this type. // Get the unique type ID of this type.
let unique_type_id = { let unique_type_id = {
let mut type_map = debug_context(cx).type_map.borrow_mut(); let mut type_map = debug_context(cx).type_map.borrow_mut();
@ -812,7 +816,7 @@ fn hex_encode(data: &[u8]) -> String {
hex_string hex_string
} }
pub fn file_metadata(cx: &CodegenCx<'ll, '_>, source_file: &SourceFile) -> &'ll DIFile { pub fn file_metadata<'ll>(cx: &CodegenCx<'ll, '_>, source_file: &SourceFile) -> &'ll DIFile {
debug!("file_metadata: file_name: {:?}", source_file.name); debug!("file_metadata: file_name: {:?}", source_file.name);
let hash = Some(&source_file.src_hash); let hash = Some(&source_file.src_hash);
@ -833,11 +837,11 @@ pub fn file_metadata(cx: &CodegenCx<'ll, '_>, source_file: &SourceFile) -> &'ll
file_metadata_raw(cx, file_name, directory, hash) file_metadata_raw(cx, file_name, directory, hash)
} }
pub fn unknown_file_metadata(cx: &CodegenCx<'ll, '_>) -> &'ll DIFile { pub fn unknown_file_metadata<'ll>(cx: &CodegenCx<'ll, '_>) -> &'ll DIFile {
file_metadata_raw(cx, None, None, None) file_metadata_raw(cx, None, None, None)
} }
fn file_metadata_raw( fn file_metadata_raw<'ll>(
cx: &CodegenCx<'ll, '_>, cx: &CodegenCx<'ll, '_>,
file_name: Option<String>, file_name: Option<String>,
directory: Option<String>, directory: Option<String>,
@ -924,7 +928,7 @@ impl MsvcBasicName for ty::FloatTy {
} }
} }
fn basic_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType { fn basic_type_metadata<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
debug!("basic_type_metadata: {:?}", t); debug!("basic_type_metadata: {:?}", t);
// When targeting MSVC, emit MSVC style type names for compatibility with // When targeting MSVC, emit MSVC style type names for compatibility with
@ -981,7 +985,7 @@ fn basic_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
typedef_metadata typedef_metadata
} }
fn foreign_type_metadata( fn foreign_type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
t: Ty<'tcx>, t: Ty<'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
@ -992,7 +996,7 @@ fn foreign_type_metadata(
create_struct_stub(cx, t, &name, unique_type_id, NO_SCOPE_METADATA, DIFlags::FlagZero) create_struct_stub(cx, t, &name, unique_type_id, NO_SCOPE_METADATA, DIFlags::FlagZero)
} }
fn pointer_type_metadata( fn pointer_type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
pointer_type: Ty<'tcx>, pointer_type: Ty<'tcx>,
pointee_type_metadata: &'ll DIType, pointee_type_metadata: &'ll DIType,
@ -1012,7 +1016,7 @@ fn pointer_type_metadata(
} }
} }
fn param_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType { fn param_type_metadata<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
debug!("param_type_metadata: {:?}", t); debug!("param_type_metadata: {:?}", t);
let name = format!("{:?}", t); let name = format!("{:?}", t);
unsafe { unsafe {
@ -1026,10 +1030,10 @@ fn param_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
} }
} }
pub fn compile_unit_metadata( pub fn compile_unit_metadata<'ll, 'tcx>(
tcx: TyCtxt<'_>, tcx: TyCtxt<'tcx>,
codegen_unit_name: &str, codegen_unit_name: &str,
debug_context: &CrateDebugContext<'ll, '_>, debug_context: &CrateDebugContext<'ll, 'tcx>,
) -> &'ll DIDescriptor { ) -> &'ll DIDescriptor {
let mut name_in_debuginfo = match tcx.sess.local_crate_source_file { let mut name_in_debuginfo = match tcx.sess.local_crate_source_file {
Some(ref path) => path.clone(), Some(ref path) => path.clone(),
@ -1159,7 +1163,7 @@ pub fn compile_unit_metadata(
return unit_metadata; return unit_metadata;
}; };
fn path_to_mdstring(llcx: &'ll llvm::Context, path: &Path) -> &'ll Value { fn path_to_mdstring<'ll>(llcx: &'ll llvm::Context, path: &Path) -> &'ll Value {
let path_str = path_to_c_string(path); let path_str = path_to_c_string(path);
unsafe { unsafe {
llvm::LLVMMDStringInContext( llvm::LLVMMDStringInContext(
@ -1176,7 +1180,7 @@ struct MetadataCreationResult<'ll> {
already_stored_in_typemap: bool, already_stored_in_typemap: bool,
} }
impl MetadataCreationResult<'ll> { impl<'ll> MetadataCreationResult<'ll> {
fn new(metadata: &'ll DIType, already_stored_in_typemap: bool) -> Self { fn new(metadata: &'ll DIType, already_stored_in_typemap: bool) -> Self {
MetadataCreationResult { metadata, already_stored_in_typemap } MetadataCreationResult { metadata, already_stored_in_typemap }
} }
@ -1243,7 +1247,7 @@ enum MemberDescriptionFactory<'ll, 'tcx> {
VariantMDF(VariantMemberDescriptionFactory<'tcx>), VariantMDF(VariantMemberDescriptionFactory<'tcx>),
} }
impl MemberDescriptionFactory<'ll, 'tcx> { impl<'ll, 'tcx> MemberDescriptionFactory<'ll, 'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> {
match *self { match *self {
StructMDF(ref this) => this.create_member_descriptions(cx), StructMDF(ref this) => this.create_member_descriptions(cx),
@ -1267,7 +1271,10 @@ struct StructMemberDescriptionFactory<'tcx> {
} }
impl<'tcx> StructMemberDescriptionFactory<'tcx> { impl<'tcx> StructMemberDescriptionFactory<'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions<'ll>(
&self,
cx: &CodegenCx<'ll, 'tcx>,
) -> Vec<MemberDescription<'ll>> {
let layout = cx.layout_of(self.ty); let layout = cx.layout_of(self.ty);
self.variant self.variant
.fields .fields
@ -1295,7 +1302,7 @@ impl<'tcx> StructMemberDescriptionFactory<'tcx> {
} }
} }
fn prepare_struct_metadata( fn prepare_struct_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
struct_type: Ty<'tcx>, struct_type: Ty<'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
@ -1338,7 +1345,7 @@ fn prepare_struct_metadata(
/// Here are some examples: /// Here are some examples:
/// - `name__field1__field2` when the upvar is captured by value. /// - `name__field1__field2` when the upvar is captured by value.
/// - `_ref__name__field` when the upvar is captured by reference. /// - `_ref__name__field` when the upvar is captured by reference.
fn closure_saved_names_of_captured_variables(tcx: TyCtxt<'tcx>, def_id: DefId) -> Vec<String> { fn closure_saved_names_of_captured_variables(tcx: TyCtxt<'_>, def_id: DefId) -> Vec<String> {
let body = tcx.optimized_mir(def_id); let body = tcx.optimized_mir(def_id);
body.var_debug_info body.var_debug_info
@ -1366,7 +1373,10 @@ struct TupleMemberDescriptionFactory<'tcx> {
} }
impl<'tcx> TupleMemberDescriptionFactory<'tcx> { impl<'tcx> TupleMemberDescriptionFactory<'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions<'ll>(
&self,
cx: &CodegenCx<'ll, 'tcx>,
) -> Vec<MemberDescription<'ll>> {
let mut capture_names = match *self.ty.kind() { let mut capture_names = match *self.ty.kind() {
ty::Generator(def_id, ..) | ty::Closure(def_id, ..) => { ty::Generator(def_id, ..) | ty::Closure(def_id, ..) => {
Some(closure_saved_names_of_captured_variables(cx.tcx, def_id).into_iter()) Some(closure_saved_names_of_captured_variables(cx.tcx, def_id).into_iter())
@ -1399,7 +1409,7 @@ impl<'tcx> TupleMemberDescriptionFactory<'tcx> {
} }
} }
fn prepare_tuple_metadata( fn prepare_tuple_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
tuple_type: Ty<'tcx>, tuple_type: Ty<'tcx>,
component_types: &[Ty<'tcx>], component_types: &[Ty<'tcx>],
@ -1443,7 +1453,10 @@ struct UnionMemberDescriptionFactory<'tcx> {
} }
impl<'tcx> UnionMemberDescriptionFactory<'tcx> { impl<'tcx> UnionMemberDescriptionFactory<'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions<'ll>(
&self,
cx: &CodegenCx<'ll, 'tcx>,
) -> Vec<MemberDescription<'ll>> {
self.variant self.variant
.fields .fields
.iter() .iter()
@ -1465,7 +1478,7 @@ impl<'tcx> UnionMemberDescriptionFactory<'tcx> {
} }
} }
fn prepare_union_metadata( fn prepare_union_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
union_type: Ty<'tcx>, union_type: Ty<'tcx>,
unique_type_id: UniqueTypeId, unique_type_id: UniqueTypeId,
@ -1506,7 +1519,7 @@ fn use_enum_fallback(cx: &CodegenCx<'_, '_>) -> bool {
// FIXME(eddyb) maybe precompute this? Right now it's computed once // FIXME(eddyb) maybe precompute this? Right now it's computed once
// per generator monomorphization, but it doesn't depend on substs. // per generator monomorphization, but it doesn't depend on substs.
fn generator_layout_and_saved_local_names( fn generator_layout_and_saved_local_names<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
def_id: DefId, def_id: DefId,
) -> (&'tcx GeneratorLayout<'tcx>, IndexVec<mir::GeneratorSavedLocal, Option<Symbol>>) { ) -> (&'tcx GeneratorLayout<'tcx>, IndexVec<mir::GeneratorSavedLocal, Option<Symbol>>) {
@ -1554,7 +1567,7 @@ struct EnumMemberDescriptionFactory<'ll, 'tcx> {
span: Span, span: Span,
} }
impl EnumMemberDescriptionFactory<'ll, 'tcx> { impl<'ll, 'tcx> EnumMemberDescriptionFactory<'ll, 'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> {
let generator_variant_info_data = match *self.enum_type.kind() { let generator_variant_info_data = match *self.enum_type.kind() {
ty::Generator(def_id, ..) => { ty::Generator(def_id, ..) => {
@ -1886,8 +1899,11 @@ struct VariantMemberDescriptionFactory<'tcx> {
span: Span, span: Span,
} }
impl VariantMemberDescriptionFactory<'tcx> { impl<'tcx> VariantMemberDescriptionFactory<'tcx> {
fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>) -> Vec<MemberDescription<'ll>> { fn create_member_descriptions<'ll>(
&self,
cx: &CodegenCx<'ll, 'tcx>,
) -> Vec<MemberDescription<'ll>> {
self.args self.args
.iter() .iter()
.enumerate() .enumerate()
@ -1961,7 +1977,7 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
field_name.map(|name| name.to_string()).unwrap_or_else(|| format!("__{}", i)) field_name.map(|name| name.to_string()).unwrap_or_else(|| format!("__{}", i))
} }
fn source_info(&self, cx: &CodegenCx<'ll, 'tcx>) -> Option<SourceInfo<'ll>> { fn source_info<'ll>(&self, cx: &CodegenCx<'ll, 'tcx>) -> Option<SourceInfo<'ll>> {
if let VariantInfo::Generator { def_id, variant_index, .. } = self { if let VariantInfo::Generator { def_id, variant_index, .. } = self {
let span = let span =
cx.tcx.generator_layout(*def_id).unwrap().variant_source_info[*variant_index].span; cx.tcx.generator_layout(*def_id).unwrap().variant_source_info[*variant_index].span;
@ -1978,7 +1994,7 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
/// `MemberDescriptionFactory` for producing the descriptions of the /// `MemberDescriptionFactory` for producing the descriptions of the
/// fields of the variant. This is a rudimentary version of a full /// fields of the variant. This is a rudimentary version of a full
/// `RecursiveTypeDescription`. /// `RecursiveTypeDescription`.
fn describe_enum_variant( fn describe_enum_variant<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
layout: layout::TyAndLayout<'tcx>, layout: layout::TyAndLayout<'tcx>,
variant: VariantInfo<'_, 'tcx>, variant: VariantInfo<'_, 'tcx>,
@ -2011,7 +2027,7 @@ fn describe_enum_variant(
(metadata_stub, member_description_factory) (metadata_stub, member_description_factory)
} }
fn prepare_enum_metadata( fn prepare_enum_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
enum_type: Ty<'tcx>, enum_type: Ty<'tcx>,
enum_def_id: DefId, enum_def_id: DefId,
@ -2330,7 +2346,7 @@ fn prepare_enum_metadata(
/// results in a LLVM struct. /// results in a LLVM struct.
/// ///
/// Examples of Rust types to use this are: structs, tuples, boxes, vecs, and enums. /// Examples of Rust types to use this are: structs, tuples, boxes, vecs, and enums.
fn composite_type_metadata( fn composite_type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
composite_type: Ty<'tcx>, composite_type: Ty<'tcx>,
composite_type_name: &str, composite_type_name: &str,
@ -2364,7 +2380,7 @@ fn composite_type_metadata(
composite_type_metadata composite_type_metadata
} }
fn set_members_of_composite_type( fn set_members_of_composite_type<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
composite_type: Ty<'tcx>, composite_type: Ty<'tcx>,
composite_type_metadata: &'ll DICompositeType, composite_type_metadata: &'ll DICompositeType,
@ -2409,7 +2425,7 @@ fn set_members_of_composite_type(
} }
/// Computes the type parameters for a type, if any, for the given metadata. /// Computes the type parameters for a type, if any, for the given metadata.
fn compute_type_parameters(cx: &CodegenCx<'ll, 'tcx>, ty: Ty<'tcx>) -> &'ll DIArray { fn compute_type_parameters<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, ty: Ty<'tcx>) -> &'ll DIArray {
if let ty::Adt(def, substs) = *ty.kind() { if let ty::Adt(def, substs) = *ty.kind() {
if substs.types().next().is_some() { if substs.types().next().is_some() {
let generics = cx.tcx.generics_of(def.did); let generics = cx.tcx.generics_of(def.did);
@ -2454,7 +2470,7 @@ fn compute_type_parameters(cx: &CodegenCx<'ll, 'tcx>, ty: Ty<'tcx>) -> &'ll DIAr
/// A convenience wrapper around `LLVMRustDIBuilderCreateStructType()`. Does not do /// A convenience wrapper around `LLVMRustDIBuilderCreateStructType()`. Does not do
/// any caching, does not add any fields to the struct. This can be done later /// any caching, does not add any fields to the struct. This can be done later
/// with `set_members_of_composite_type()`. /// with `set_members_of_composite_type()`.
fn create_struct_stub( fn create_struct_stub<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
struct_type: Ty<'tcx>, struct_type: Ty<'tcx>,
struct_type_name: &str, struct_type_name: &str,
@ -2495,7 +2511,7 @@ fn create_struct_stub(
metadata_stub metadata_stub
} }
fn create_union_stub( fn create_union_stub<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
union_type: Ty<'tcx>, union_type: Ty<'tcx>,
union_type_name: &str, union_type_name: &str,
@ -2536,7 +2552,7 @@ fn create_union_stub(
/// Creates debug information for the given global variable. /// Creates debug information for the given global variable.
/// ///
/// Adds the created metadata nodes directly to the crate's IR. /// Adds the created metadata nodes directly to the crate's IR.
pub fn create_global_var_metadata(cx: &CodegenCx<'ll, '_>, def_id: DefId, global: &'ll Value) { pub fn create_global_var_metadata<'ll>(cx: &CodegenCx<'ll, '_>, def_id: DefId, global: &'ll Value) {
if cx.dbg_cx.is_none() { if cx.dbg_cx.is_none() {
return; return;
} }
@ -2591,7 +2607,7 @@ pub fn create_global_var_metadata(cx: &CodegenCx<'ll, '_>, def_id: DefId, global
} }
/// Generates LLVM debuginfo for a vtable. /// Generates LLVM debuginfo for a vtable.
fn vtable_type_metadata( fn vtable_type_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
ty: Ty<'tcx>, ty: Ty<'tcx>,
poly_trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>, poly_trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>,
@ -2623,7 +2639,7 @@ fn vtable_type_metadata(
/// given type. /// given type.
/// ///
/// Adds the created metadata nodes directly to the crate's IR. /// Adds the created metadata nodes directly to the crate's IR.
pub fn create_vtable_metadata( pub fn create_vtable_metadata<'ll, 'tcx>(
cx: &CodegenCx<'ll, 'tcx>, cx: &CodegenCx<'ll, 'tcx>,
ty: Ty<'tcx>, ty: Ty<'tcx>,
poly_trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>, poly_trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>,
@ -2662,7 +2678,7 @@ pub fn create_vtable_metadata(
} }
/// Creates an "extension" of an existing `DIScope` into another file. /// Creates an "extension" of an existing `DIScope` into another file.
pub fn extend_scope_to_file( pub fn extend_scope_to_file<'ll>(
cx: &CodegenCx<'ll, '_>, cx: &CodegenCx<'ll, '_>,
scope_metadata: &'ll DIScope, scope_metadata: &'ll DIScope,
file: &SourceFile, file: &SourceFile,

View file

@ -71,7 +71,7 @@ pub struct CrateDebugContext<'a, 'tcx> {
composite_types_completed: RefCell<FxHashSet<&'a DIType>>, composite_types_completed: RefCell<FxHashSet<&'a DIType>>,
} }
impl Drop for CrateDebugContext<'a, 'tcx> { impl Drop for CrateDebugContext<'_, '_> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
llvm::LLVMRustDIBuilderDispose(&mut *(self.builder as *mut _)); llvm::LLVMRustDIBuilderDispose(&mut *(self.builder as *mut _));
@ -144,7 +144,7 @@ pub fn finalize(cx: &CodegenCx<'_, '_>) {
} }
} }
impl DebugInfoBuilderMethods for Builder<'a, 'll, 'tcx> { impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
// FIXME(eddyb) find a common convention for all of the debuginfo-related // FIXME(eddyb) find a common convention for all of the debuginfo-related
// names (choose between `dbg`, `debug`, `debuginfo`, `debug_info` etc.). // names (choose between `dbg`, `debug`, `debuginfo`, `debug_info` etc.).
fn dbg_var_addr( fn dbg_var_addr(
@ -236,7 +236,7 @@ pub struct DebugLoc {
pub col: u32, pub col: u32,
} }
impl CodegenCx<'ll, '_> { impl CodegenCx<'_, '_> {
/// Looks up debug source information about a `BytePos`. /// Looks up debug source information about a `BytePos`.
// FIXME(eddyb) rename this to better indicate it's a duplicate of // FIXME(eddyb) rename this to better indicate it's a duplicate of
// `lookup_char_pos` rather than `dbg_loc`, perhaps by making // `lookup_char_pos` rather than `dbg_loc`, perhaps by making
@ -266,7 +266,7 @@ impl CodegenCx<'ll, '_> {
} }
} }
impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn create_function_debug_context( fn create_function_debug_context(
&self, &self,
instance: Instance<'tcx>, instance: Instance<'tcx>,

View file

@ -17,7 +17,7 @@ pub fn mangled_name_of_instance<'a, 'tcx>(
tcx.symbol_name(instance) tcx.symbol_name(instance)
} }
pub fn item_namespace(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope { pub fn item_namespace<'ll>(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope {
if let Some(&scope) = debug_context(cx).namespace_map.borrow().get(&def_id) { if let Some(&scope) = debug_context(cx).namespace_map.borrow().get(&def_id) {
return scope; return scope;
} }

View file

@ -23,21 +23,26 @@ pub fn is_node_local_to_unit(cx: &CodegenCx<'_, '_>, def_id: DefId) -> bool {
} }
#[allow(non_snake_case)] #[allow(non_snake_case)]
pub fn create_DIArray(builder: &DIBuilder<'ll>, arr: &[Option<&'ll DIDescriptor>]) -> &'ll DIArray { pub fn create_DIArray<'ll>(
builder: &DIBuilder<'ll>,
arr: &[Option<&'ll DIDescriptor>],
) -> &'ll DIArray {
unsafe { llvm::LLVMRustDIBuilderGetOrCreateArray(builder, arr.as_ptr(), arr.len() as u32) } unsafe { llvm::LLVMRustDIBuilderGetOrCreateArray(builder, arr.as_ptr(), arr.len() as u32) }
} }
#[inline] #[inline]
pub fn debug_context(cx: &'a CodegenCx<'ll, 'tcx>) -> &'a CrateDebugContext<'ll, 'tcx> { pub fn debug_context<'a, 'll, 'tcx>(
cx: &'a CodegenCx<'ll, 'tcx>,
) -> &'a CrateDebugContext<'ll, 'tcx> {
cx.dbg_cx.as_ref().unwrap() cx.dbg_cx.as_ref().unwrap()
} }
#[inline] #[inline]
#[allow(non_snake_case)] #[allow(non_snake_case)]
pub fn DIB(cx: &'a CodegenCx<'ll, '_>) -> &'a DIBuilder<'ll> { pub fn DIB<'a, 'll>(cx: &'a CodegenCx<'ll, '_>) -> &'a DIBuilder<'ll> {
cx.dbg_cx.as_ref().unwrap().builder cx.dbg_cx.as_ref().unwrap().builder
} }
pub fn get_namespace_for_item(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope { pub fn get_namespace_for_item<'ll>(cx: &CodegenCx<'ll, '_>, def_id: DefId) -> &'ll DIScope {
item_namespace(cx, cx.tcx.parent(def_id).expect("get_namespace_for_item: missing parent?")) item_namespace(cx, cx.tcx.parent(def_id).expect("get_namespace_for_item: missing parent?"))
} }

View file

@ -26,7 +26,7 @@ use tracing::debug;
/// ///
/// If theres a value with the same name already declared, the function will /// If theres a value with the same name already declared, the function will
/// update the declaration and return existing Value instead. /// update the declaration and return existing Value instead.
fn declare_raw_fn( fn declare_raw_fn<'ll>(
cx: &CodegenCx<'ll, '_>, cx: &CodegenCx<'ll, '_>,
name: &str, name: &str,
callconv: llvm::CallConv, callconv: llvm::CallConv,
@ -50,7 +50,7 @@ fn declare_raw_fn(
llfn llfn
} }
impl CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
/// Declare a global value. /// Declare a global value.
/// ///
/// If theres a value with the same name already declared, the function will /// If theres a value with the same name already declared, the function will

View file

@ -25,7 +25,10 @@ use rustc_target::spec::{HasTargetSpec, PanicStrategy};
use std::cmp::Ordering; use std::cmp::Ordering;
use std::iter; use std::iter;
fn get_simple_intrinsic(cx: &CodegenCx<'ll, '_>, name: Symbol) -> Option<(&'ll Type, &'ll Value)> { fn get_simple_intrinsic<'ll>(
cx: &CodegenCx<'ll, '_>,
name: Symbol,
) -> Option<(&'ll Type, &'ll Value)> {
let llvm_name = match name { let llvm_name = match name {
sym::sqrtf32 => "llvm.sqrt.f32", sym::sqrtf32 => "llvm.sqrt.f32",
sym::sqrtf64 => "llvm.sqrt.f64", sym::sqrtf64 => "llvm.sqrt.f64",
@ -74,7 +77,7 @@ fn get_simple_intrinsic(cx: &CodegenCx<'ll, '_>, name: Symbol) -> Option<(&'ll T
Some(cx.get_intrinsic(llvm_name)) Some(cx.get_intrinsic(llvm_name))
} }
impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> { impl<'ll, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'_, 'll, 'tcx> {
fn codegen_intrinsic_call( fn codegen_intrinsic_call(
&mut self, &mut self,
instance: ty::Instance<'tcx>, instance: ty::Instance<'tcx>,
@ -411,8 +414,8 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
} }
} }
fn try_intrinsic( fn try_intrinsic<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
try_func: &'ll Value, try_func: &'ll Value,
data: &'ll Value, data: &'ll Value,
catch_func: &'ll Value, catch_func: &'ll Value,
@ -441,8 +444,8 @@ fn try_intrinsic(
// instructions are meant to work for all targets, as of the time of this // instructions are meant to work for all targets, as of the time of this
// writing, however, LLVM does not recommend the usage of these new instructions // writing, however, LLVM does not recommend the usage of these new instructions
// as the old ones are still more optimized. // as the old ones are still more optimized.
fn codegen_msvc_try( fn codegen_msvc_try<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
try_func: &'ll Value, try_func: &'ll Value,
data: &'ll Value, data: &'ll Value,
catch_func: &'ll Value, catch_func: &'ll Value,
@ -593,8 +596,8 @@ fn codegen_msvc_try(
// function calling it, and that function may already have other personality // function calling it, and that function may already have other personality
// functions in play. By calling a shim we're guaranteed that our shim will have // functions in play. By calling a shim we're guaranteed that our shim will have
// the right personality function. // the right personality function.
fn codegen_gnu_try( fn codegen_gnu_try<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
try_func: &'ll Value, try_func: &'ll Value,
data: &'ll Value, data: &'ll Value,
catch_func: &'ll Value, catch_func: &'ll Value,
@ -649,8 +652,8 @@ fn codegen_gnu_try(
// Variant of codegen_gnu_try used for emscripten where Rust panics are // Variant of codegen_gnu_try used for emscripten where Rust panics are
// implemented using C++ exceptions. Here we use exceptions of a specific type // implemented using C++ exceptions. Here we use exceptions of a specific type
// (`struct rust_panic`) to represent Rust panics. // (`struct rust_panic`) to represent Rust panics.
fn codegen_emcc_try( fn codegen_emcc_try<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
try_func: &'ll Value, try_func: &'ll Value,
data: &'ll Value, data: &'ll Value,
catch_func: &'ll Value, catch_func: &'ll Value,
@ -799,8 +802,8 @@ fn get_rust_try_fn<'ll, 'tcx>(
rust_try rust_try
} }
fn generic_simd_intrinsic( fn generic_simd_intrinsic<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
name: Symbol, name: Symbol,
callee_ty: Ty<'tcx>, callee_ty: Ty<'tcx>,
args: &[OperandRef<'tcx, &'ll Value>], args: &[OperandRef<'tcx, &'ll Value>],
@ -1129,12 +1132,12 @@ fn generic_simd_intrinsic(
} }
} }
fn simd_simple_float_intrinsic( fn simd_simple_float_intrinsic<'ll, 'tcx>(
name: Symbol, name: Symbol,
in_elem: &::rustc_middle::ty::TyS<'_>, in_elem: &::rustc_middle::ty::TyS<'_>,
in_ty: &::rustc_middle::ty::TyS<'_>, in_ty: &::rustc_middle::ty::TyS<'_>,
in_len: u64, in_len: u64,
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
span: Span, span: Span,
args: &[OperandRef<'tcx, &'ll Value>], args: &[OperandRef<'tcx, &'ll Value>],
) -> Result<&'ll Value, ()> { ) -> Result<&'ll Value, ()> {
@ -1232,7 +1235,7 @@ fn generic_simd_intrinsic(
elem_ty: Ty<'_>, elem_ty: Ty<'_>,
vec_len: u64, vec_len: u64,
no_pointers: usize, no_pointers: usize,
bx: &Builder<'a, 'll, 'tcx>, bx: &Builder<'_, '_, '_>,
) -> String { ) -> String {
let p0s: String = "p0".repeat(no_pointers); let p0s: String = "p0".repeat(no_pointers);
match *elem_ty.kind() { match *elem_ty.kind() {
@ -1255,7 +1258,7 @@ fn generic_simd_intrinsic(
} }
} }
fn llvm_vector_ty( fn llvm_vector_ty<'ll>(
cx: &CodegenCx<'ll, '_>, cx: &CodegenCx<'ll, '_>,
elem_ty: Ty<'_>, elem_ty: Ty<'_>,
vec_len: u64, vec_len: u64,

View file

@ -8,7 +8,6 @@
#![feature(bool_to_option)] #![feature(bool_to_option)]
#![feature(crate_visibility_modifier)] #![feature(crate_visibility_modifier)]
#![feature(extern_types)] #![feature(extern_types)]
#![feature(in_band_lifetimes)]
#![feature(nll)] #![feature(nll)]
#![recursion_limit = "256"] #![recursion_limit = "256"]

View file

@ -43,7 +43,7 @@ pub struct OptimizationDiagnostic<'ll> {
pub message: String, pub message: String,
} }
impl OptimizationDiagnostic<'ll> { impl<'ll> OptimizationDiagnostic<'ll> {
unsafe fn unpack(kind: OptimizationDiagnosticKind, di: &'ll DiagnosticInfo) -> Self { unsafe fn unpack(kind: OptimizationDiagnosticKind, di: &'ll DiagnosticInfo) -> Self {
let mut function = None; let mut function = None;
let mut line = 0; let mut line = 0;
@ -142,7 +142,7 @@ pub struct InlineAsmDiagnostic {
} }
impl InlineAsmDiagnostic { impl InlineAsmDiagnostic {
unsafe fn unpackInlineAsm(di: &'ll DiagnosticInfo) -> Self { unsafe fn unpackInlineAsm(di: &DiagnosticInfo) -> Self {
let mut cookie = 0; let mut cookie = 0;
let mut message = None; let mut message = None;
let mut level = super::DiagnosticLevel::Error; let mut level = super::DiagnosticLevel::Error;
@ -157,7 +157,7 @@ impl InlineAsmDiagnostic {
} }
} }
unsafe fn unpackSrcMgr(di: &'ll DiagnosticInfo) -> Self { unsafe fn unpackSrcMgr(di: &DiagnosticInfo) -> Self {
let mut cookie = 0; let mut cookie = 0;
let smdiag = SrcMgrDiagnostic::unpack(super::LLVMRustGetSMDiagnostic(di, &mut cookie)); let smdiag = SrcMgrDiagnostic::unpack(super::LLVMRustGetSMDiagnostic(di, &mut cookie));
InlineAsmDiagnostic { InlineAsmDiagnostic {
@ -180,7 +180,7 @@ pub enum Diagnostic<'ll> {
UnknownDiagnostic(&'ll DiagnosticInfo), UnknownDiagnostic(&'ll DiagnosticInfo),
} }
impl Diagnostic<'ll> { impl<'ll> Diagnostic<'ll> {
pub unsafe fn unpack(di: &'ll DiagnosticInfo) -> Self { pub unsafe fn unpack(di: &'ll DiagnosticInfo) -> Self {
use super::DiagnosticKind as Dk; use super::DiagnosticKind as Dk;
let kind = super::LLVMRustGetDiagInfoKind(di); let kind = super::LLVMRustGetDiagInfoKind(di);

File diff suppressed because it is too large Load diff

View file

@ -31,13 +31,13 @@ impl LLVMRustResult {
} }
} }
pub fn AddFunctionAttrStringValue(llfn: &'a Value, idx: AttributePlace, attr: &CStr, value: &CStr) { pub fn AddFunctionAttrStringValue(llfn: &Value, idx: AttributePlace, attr: &CStr, value: &CStr) {
unsafe { unsafe {
LLVMRustAddFunctionAttrStringValue(llfn, idx.as_uint(), attr.as_ptr(), value.as_ptr()) LLVMRustAddFunctionAttrStringValue(llfn, idx.as_uint(), attr.as_ptr(), value.as_ptr())
} }
} }
pub fn AddFunctionAttrString(llfn: &'a Value, idx: AttributePlace, attr: &CStr) { pub fn AddFunctionAttrString(llfn: &Value, idx: AttributePlace, attr: &CStr) {
unsafe { unsafe {
LLVMRustAddFunctionAttrStringValue(llfn, idx.as_uint(), attr.as_ptr(), std::ptr::null()) LLVMRustAddFunctionAttrStringValue(llfn, idx.as_uint(), attr.as_ptr(), std::ptr::null())
} }
@ -86,12 +86,12 @@ impl FromStr for ArchiveKind {
} }
} }
pub fn SetInstructionCallConv(instr: &'a Value, cc: CallConv) { pub fn SetInstructionCallConv(instr: &Value, cc: CallConv) {
unsafe { unsafe {
LLVMSetInstructionCallConv(instr, cc as c_uint); LLVMSetInstructionCallConv(instr, cc as c_uint);
} }
} }
pub fn SetFunctionCallConv(fn_: &'a Value, cc: CallConv) { pub fn SetFunctionCallConv(fn_: &Value, cc: CallConv) {
unsafe { unsafe {
LLVMSetFunctionCallConv(fn_, cc as c_uint); LLVMSetFunctionCallConv(fn_, cc as c_uint);
} }
@ -103,26 +103,26 @@ pub fn SetFunctionCallConv(fn_: &'a Value, cc: CallConv) {
// value's name as the comdat value to make sure that it is in a 1-to-1 relationship to the // value's name as the comdat value to make sure that it is in a 1-to-1 relationship to the
// function. // function.
// For more details on COMDAT sections see e.g., https://www.airs.com/blog/archives/52 // For more details on COMDAT sections see e.g., https://www.airs.com/blog/archives/52
pub fn SetUniqueComdat(llmod: &Module, val: &'a Value) { pub fn SetUniqueComdat(llmod: &Module, val: &Value) {
unsafe { unsafe {
let name = get_value_name(val); let name = get_value_name(val);
LLVMRustSetComdat(llmod, val, name.as_ptr().cast(), name.len()); LLVMRustSetComdat(llmod, val, name.as_ptr().cast(), name.len());
} }
} }
pub fn UnsetComdat(val: &'a Value) { pub fn UnsetComdat(val: &Value) {
unsafe { unsafe {
LLVMRustUnsetComdat(val); LLVMRustUnsetComdat(val);
} }
} }
pub fn SetUnnamedAddress(global: &'a Value, unnamed: UnnamedAddr) { pub fn SetUnnamedAddress(global: &Value, unnamed: UnnamedAddr) {
unsafe { unsafe {
LLVMSetUnnamedAddress(global, unnamed); LLVMSetUnnamedAddress(global, unnamed);
} }
} }
pub fn set_thread_local_mode(global: &'a Value, mode: ThreadLocalMode) { pub fn set_thread_local_mode(global: &Value, mode: ThreadLocalMode) {
unsafe { unsafe {
LLVMSetThreadLocalMode(global, mode); LLVMSetThreadLocalMode(global, mode);
} }
@ -264,7 +264,7 @@ pub struct OperandBundleDef<'a> {
pub raw: &'a mut ffi::OperandBundleDef<'a>, pub raw: &'a mut ffi::OperandBundleDef<'a>,
} }
impl OperandBundleDef<'a> { impl<'a> OperandBundleDef<'a> {
pub fn new(name: &str, vals: &[&'a Value]) -> Self { pub fn new(name: &str, vals: &[&'a Value]) -> Self {
let name = SmallCStr::new(name); let name = SmallCStr::new(name);
let def = unsafe { let def = unsafe {
@ -274,7 +274,7 @@ impl OperandBundleDef<'a> {
} }
} }
impl Drop for OperandBundleDef<'a> { impl Drop for OperandBundleDef<'_> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
LLVMRustFreeOperandBundleDef(&mut *(self.raw as *mut _)); LLVMRustFreeOperandBundleDef(&mut *(self.raw as *mut _));

View file

@ -13,7 +13,7 @@ use rustc_session::config::CrateType;
use rustc_target::spec::RelocModel; use rustc_target::spec::RelocModel;
use tracing::debug; use tracing::debug;
impl PreDefineMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'tcx> PreDefineMethods<'tcx> for CodegenCx<'_, 'tcx> {
fn predefine_static( fn predefine_static(
&self, &self,
def_id: DefId, def_id: DefId,
@ -92,7 +92,7 @@ impl PreDefineMethods<'tcx> for CodegenCx<'ll, 'tcx> {
} }
} }
impl CodegenCx<'ll, 'tcx> { impl CodegenCx<'_, '_> {
/// Whether a definition or declaration can be assumed to be local to a group of /// Whether a definition or declaration can be assumed to be local to a group of
/// libraries that form a single DSO or executable. /// libraries that form a single DSO or executable.
pub(crate) unsafe fn should_assume_dso_local( pub(crate) unsafe fn should_assume_dso_local(

View file

@ -38,7 +38,7 @@ impl fmt::Debug for Type {
} }
} }
impl CodegenCx<'ll, 'tcx> { impl<'ll> CodegenCx<'ll, '_> {
crate fn type_named_struct(&self, name: &str) -> &'ll Type { crate fn type_named_struct(&self, name: &str) -> &'ll Type {
let name = SmallCStr::new(name); let name = SmallCStr::new(name);
unsafe { llvm::LLVMStructCreateNamed(self.llcx, name.as_ptr()) } unsafe { llvm::LLVMStructCreateNamed(self.llcx, name.as_ptr()) }
@ -133,7 +133,7 @@ impl CodegenCx<'ll, 'tcx> {
} }
} }
impl BaseTypeMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> BaseTypeMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn type_i1(&self) -> &'ll Type { fn type_i1(&self) -> &'ll Type {
unsafe { llvm::LLVMInt1TypeInContext(self.llcx) } unsafe { llvm::LLVMInt1TypeInContext(self.llcx) }
} }
@ -252,7 +252,7 @@ impl Type {
} }
} }
impl LayoutTypeMethods<'tcx> for CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> LayoutTypeMethods<'tcx> for CodegenCx<'ll, 'tcx> {
fn backend_type(&self, layout: TyAndLayout<'tcx>) -> &'ll Type { fn backend_type(&self, layout: TyAndLayout<'tcx>) -> &'ll Type {
layout.llvm_type(self) layout.llvm_type(self)
} }

View file

@ -11,8 +11,8 @@ use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf};
use rustc_middle::ty::Ty; use rustc_middle::ty::Ty;
use rustc_target::abi::{Align, Endian, HasDataLayout, Size}; use rustc_target::abi::{Align, Endian, HasDataLayout, Size};
fn round_pointer_up_to_alignment( fn round_pointer_up_to_alignment<'ll>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, '_>,
addr: &'ll Value, addr: &'ll Value,
align: Align, align: Align,
ptr_ty: &'ll Type, ptr_ty: &'ll Type,
@ -23,8 +23,8 @@ fn round_pointer_up_to_alignment(
bx.inttoptr(ptr_as_int, ptr_ty) bx.inttoptr(ptr_as_int, ptr_ty)
} }
fn emit_direct_ptr_va_arg( fn emit_direct_ptr_va_arg<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
list: OperandRef<'tcx, &'ll Value>, list: OperandRef<'tcx, &'ll Value>,
llty: &'ll Type, llty: &'ll Type,
size: Size, size: Size,
@ -62,8 +62,8 @@ fn emit_direct_ptr_va_arg(
} }
} }
fn emit_ptr_va_arg( fn emit_ptr_va_arg<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
list: OperandRef<'tcx, &'ll Value>, list: OperandRef<'tcx, &'ll Value>,
target_ty: Ty<'tcx>, target_ty: Ty<'tcx>,
indirect: bool, indirect: bool,
@ -90,8 +90,8 @@ fn emit_ptr_va_arg(
} }
} }
fn emit_aapcs_va_arg( fn emit_aapcs_va_arg<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
list: OperandRef<'tcx, &'ll Value>, list: OperandRef<'tcx, &'ll Value>,
target_ty: Ty<'tcx>, target_ty: Ty<'tcx>,
) -> &'ll Value { ) -> &'ll Value {
@ -175,8 +175,8 @@ fn emit_aapcs_va_arg(
val val
} }
pub(super) fn emit_va_arg( pub(super) fn emit_va_arg<'ll, 'tcx>(
bx: &mut Builder<'a, 'll, 'tcx>, bx: &mut Builder<'_, 'll, 'tcx>,
addr: OperandRef<'tcx, &'ll Value>, addr: OperandRef<'tcx, &'ll Value>,
target_ty: Ty<'tcx>, target_ty: Ty<'tcx>,
) -> &'ll Value { ) -> &'ll Value {