diff options
| author | Makai <m4kai410@gmail.com> | 2025-05-06 12:41:34 +0800 |
|---|---|---|
| committer | Makai <m4kai410@gmail.com> | 2025-07-04 01:33:18 +0000 |
| commit | 45cf29d65160ca30c1878fa516bb93e0f0dc9619 (patch) | |
| tree | 2c138f503a23dc25e5a91c5957d244ae44afb6aa | |
| parent | 6916089d7c4cefc2c2bb10398547535e0250fb60 (diff) | |
| download | rust-45cf29d65160ca30c1878fa516bb93e0f0dc9619.tar.gz rust-45cf29d65160ca30c1878fa516bb93e0f0dc9619.zip | |
refactor: remove the `tcx` field in `Tables`
the only functionality of `Tables` is caching results. this commit moves calls to rustc queries from `Tables` to `SmirCtxt`.
| -rw-r--r-- | compiler/rustc_smir/src/rustc_internal/mod.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/alloc.rs | 35 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/builder.rs | 8 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/context/impls.rs | 81 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/context/mod.rs | 14 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/mod.rs | 48 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/stable_mir/alloc.rs | 11 | ||||
| -rw-r--r-- | compiler/rustc_smir/src/stable_mir/compiler_interface.rs | 20 |
8 files changed, 100 insertions, 119 deletions
diff --git a/compiler/rustc_smir/src/rustc_internal/mod.rs b/compiler/rustc_smir/src/rustc_internal/mod.rs index 5947a7a8440..db232a1b83a 100644 --- a/compiler/rustc_smir/src/rustc_internal/mod.rs +++ b/compiler/rustc_smir/src/rustc_internal/mod.rs @@ -127,7 +127,7 @@ where F: FnOnce() -> T, { let smir_cx = RefCell::new(SmirCtxt::new(tcx)); - let container = SmirContainer { tables: RefCell::new(Tables::new(tcx)), cx: smir_cx }; + let container = SmirContainer { tables: RefCell::new(Tables::default()), cx: smir_cx }; stable_mir::compiler_interface::run(&container, || init(&container, f)) } diff --git a/compiler/rustc_smir/src/rustc_smir/alloc.rs b/compiler/rustc_smir/src/rustc_smir/alloc.rs index 34692962de7..6b32b5b07d8 100644 --- a/compiler/rustc_smir/src/rustc_smir/alloc.rs +++ b/compiler/rustc_smir/src/rustc_smir/alloc.rs @@ -8,19 +8,28 @@ use rustc_abi::{Size, TyAndLayout}; use rustc_middle::mir::interpret::{ AllocId, AllocInit, AllocRange, Allocation, ConstAllocation, Pointer, Scalar, alloc_range, }; -use rustc_middle::ty::Ty; +use rustc_middle::ty::{Ty, layout}; -use crate::rustc_smir::{Bridge, SmirError, Tables}; +use super::SmirCtxt; +use crate::rustc_smir::{Bridge, SmirError}; + +pub fn create_ty_and_layout<'tcx, B: Bridge>( + cx: &SmirCtxt<'tcx, B>, + ty: Ty<'tcx>, +) -> Result<TyAndLayout<'tcx, Ty<'tcx>>, &'tcx layout::LayoutError<'tcx>> { + use crate::rustc_smir::context::SmirTypingEnv; + cx.tcx.layout_of(cx.fully_monomorphized().as_query_input(ty)) +} pub fn try_new_scalar<'tcx, B: Bridge>( layout: TyAndLayout<'tcx, Ty<'tcx>>, scalar: Scalar, - tables: &mut Tables<'tcx, B>, + cx: &SmirCtxt<'tcx, B>, ) -> Result<Allocation, B::Error> { let size = scalar.size(); let mut allocation = Allocation::new(size, layout.align.abi, AllocInit::Uninit, ()); allocation - .write_scalar(&tables.tcx, alloc_range(Size::ZERO, size), scalar) + .write_scalar(&cx.tcx, alloc_range(Size::ZERO, size), scalar) .map_err(|e| B::Error::from_internal(e))?; Ok(allocation) @@ -30,24 +39,20 @@ pub fn try_new_slice<'tcx, B: Bridge>( layout: TyAndLayout<'tcx, Ty<'tcx>>, data: ConstAllocation<'tcx>, meta: u64, - tables: &mut Tables<'tcx, B>, + cx: &SmirCtxt<'tcx, B>, ) -> Result<Allocation, B::Error> { - let alloc_id = tables.tcx.reserve_and_set_memory_alloc(data); + let alloc_id = cx.tcx.reserve_and_set_memory_alloc(data); let ptr = Pointer::new(alloc_id.into(), Size::ZERO); let scalar_ptr = Scalar::from_pointer(ptr, &tables.tcx); let scalar_meta: Scalar = Scalar::from_target_usize(meta, &tables.tcx); let mut allocation = Allocation::new(layout.size, layout.align.abi, AllocInit::Uninit, ()); allocation - .write_scalar( - &tables.tcx, - alloc_range(Size::ZERO, tables.tcx.data_layout.pointer_size), - scalar_ptr, - ) + .write_scalar(&cx.tcx, alloc_range(Size::ZERO, cx.tcx.data_layout.pointer_size), scalar_ptr) .map_err(|e| B::Error::from_internal(e))?; allocation .write_scalar( - &tables.tcx, - alloc_range(tables.tcx.data_layout.pointer_size, scalar_meta.size()), + &cx.tcx, + alloc_range(cx.tcx.data_layout.pointer_size, scalar_meta.size()), scalar_meta, ) .map_err(|e| B::Error::from_internal(e))?; @@ -57,9 +62,9 @@ pub fn try_new_slice<'tcx, B: Bridge>( pub fn try_new_indirect<'tcx, B: Bridge>( alloc_id: AllocId, - tables: &mut Tables<'tcx, B>, + cx: &SmirCtxt<'tcx, B>, ) -> ConstAllocation<'tcx> { - let alloc = tables.tcx.global_alloc(alloc_id).unwrap_memory(); + let alloc = cx.tcx.global_alloc(alloc_id).unwrap_memory(); alloc } diff --git a/compiler/rustc_smir/src/rustc_smir/builder.rs b/compiler/rustc_smir/src/rustc_smir/builder.rs index b8a1d240e3f..2141053d09a 100644 --- a/compiler/rustc_smir/src/rustc_smir/builder.rs +++ b/compiler/rustc_smir/src/rustc_smir/builder.rs @@ -9,8 +9,6 @@ use rustc_middle::mir; use rustc_middle::mir::visit::MutVisitor; use rustc_middle::ty::{self, TyCtxt}; -use crate::rustc_smir::{Bridge, Tables}; - /// Builds a monomorphic body for a given instance. pub(crate) struct BodyBuilder<'tcx> { tcx: TyCtxt<'tcx>, @@ -30,8 +28,8 @@ impl<'tcx> BodyBuilder<'tcx> { /// Build a stable monomorphic body for a given instance based on the MIR body. /// /// All constants are also evaluated. - pub(crate) fn build<B: Bridge>(mut self, tables: &mut Tables<'tcx, B>) -> mir::Body<'tcx> { - let body = tables.tcx.instance_mir(self.instance.def).clone(); + pub(crate) fn build(mut self) -> mir::Body<'tcx> { + let body = self.tcx.instance_mir(self.instance.def).clone(); let mono_body = if !self.instance.args.is_empty() // Without the `generic_const_exprs` feature gate, anon consts in signatures do not // get generic parameters. Which is wrong, but also not a problem without @@ -39,7 +37,7 @@ impl<'tcx> BodyBuilder<'tcx> { || self.tcx.def_kind(self.instance.def_id()) != DefKind::AnonConst { let mut mono_body = self.instance.instantiate_mir_and_normalize_erasing_regions( - tables.tcx, + self.tcx, ty::TypingEnv::fully_monomorphized(), ty::EarlyBinder::bind(body), ); diff --git a/compiler/rustc_smir/src/rustc_smir/context/impls.rs b/compiler/rustc_smir/src/rustc_smir/context/impls.rs index 77a2f879d6a..bf86d4ac41d 100644 --- a/compiler/rustc_smir/src/rustc_smir/context/impls.rs +++ b/compiler/rustc_smir/src/rustc_smir/context/impls.rs @@ -143,6 +143,46 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { self.tcx.valtree_to_const_val(key) } + /// Return whether the instance as a body available. + /// + /// Items and intrinsics may have a body available from its definition. + /// Shims body may be generated depending on their type. + pub(crate) fn instance_has_body(&self, instance: Instance<'tcx>) -> bool { + let def_id = instance.def_id(); + self.item_has_body(def_id) + || !matches!( + instance.def, + ty::InstanceKind::Virtual(..) + | ty::InstanceKind::Intrinsic(..) + | ty::InstanceKind::Item(..) + ) + } + + /// Return whether the item has a body defined by the user. + /// + /// Note that intrinsics may have a placeholder body that shouldn't be used in practice. + /// In StableMIR, we handle this case as if the body is not available. + pub(crate) fn item_has_body(&self, def_id: DefId) -> bool { + let must_override = if let Some(intrinsic) = self.tcx.intrinsic(def_id) { + intrinsic.must_be_overridden + } else { + false + }; + !must_override && self.tcx.is_mir_available(def_id) + } + + fn filter_fn_def(&self, def_id: DefId) -> Option<DefId> { + if matches!(self.tcx.def_kind(def_id), DefKind::Fn | DefKind::AssocFn) { + Some(def_id) + } else { + None + } + } + + fn filter_static_def(&self, def_id: DefId) -> Option<DefId> { + matches!(self.tcx.def_kind(def_id), DefKind::Static { .. }).then(|| def_id) + } + pub fn target_endian(&self) -> Endian { self.tcx.data_layout.endian } @@ -167,8 +207,8 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { } /// Check whether the body of a function is available. - pub fn has_body(&self, def: DefId, tables: &mut Tables<'_, B>) -> bool { - tables.item_has_body(def) + pub fn has_body(&self, def: DefId) -> bool { + self.item_has_body(def) } pub fn foreign_modules(&self, crate_num: CrateNum) -> Vec<DefId> { @@ -176,13 +216,13 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { } /// Retrieve all functions defined in this crate. - pub fn crate_functions(&self, crate_num: CrateNum, tables: &mut Tables<'_, B>) -> Vec<DefId> { - filter_def_ids(self.tcx, crate_num, |def_id| tables.filter_fn_def(def_id)) + pub fn crate_functions(&self, crate_num: CrateNum) -> Vec<DefId> { + filter_def_ids(self.tcx, crate_num, |def_id| self.filter_fn_def(def_id)) } /// Retrieve all static items defined in this crate. - pub fn crate_statics(&self, crate_num: CrateNum, tables: &mut Tables<'_, B>) -> Vec<DefId> { - filter_def_ids(self.tcx, crate_num, |def_id| tables.filter_static_def(def_id)) + pub fn crate_statics(&self, crate_num: CrateNum) -> Vec<DefId> { + filter_def_ids(self.tcx, crate_num, |def_id| self.filter_static_def(def_id)) } pub fn foreign_module(&self, mod_def: DefId) -> &ForeignModule { @@ -574,14 +614,8 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { } /// Get the body of an Instance which is already monomorphized. - pub fn instance_body( - &self, - instance: ty::Instance<'tcx>, - tables: &mut Tables<'tcx, B>, - ) -> Option<Body<'tcx>> { - tables - .instance_has_body(instance) - .then(|| BodyBuilder::new(self.tcx, instance).build(tables)) + pub fn instance_body(&self, instance: ty::Instance<'tcx>) -> Option<Body<'tcx>> { + self.instance_has_body(instance).then(|| BodyBuilder::new(self.tcx, instance).build()) } /// Get the instance type with generic instantiations applied and lifetimes erased. @@ -599,18 +633,13 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { pub fn instance_abi( &self, instance: ty::Instance<'tcx>, - tables: &mut Tables<'tcx, B>, ) -> Result<&FnAbi<'tcx, Ty<'tcx>>, B::Error> { - Ok(tables.fn_abi_of_instance(instance, List::empty())?) + Ok(self.fn_abi_of_instance(instance, List::empty())?) } /// Get the ABI of a function pointer. - pub fn fn_ptr_abi( - &self, - sig: PolyFnSig<'tcx>, - tables: &mut Tables<'tcx, B>, - ) -> Result<&FnAbi<'tcx, Ty<'tcx>>, B::Error> { - Ok(tables.fn_abi_of_fn_ptr(sig, List::empty())?) + pub fn fn_ptr_abi(&self, sig: PolyFnSig<'tcx>) -> Result<&FnAbi<'tcx, Ty<'tcx>>, B::Error> { + Ok(self.fn_abi_of_fn_ptr(sig, List::empty())?) } /// Get the instance. @@ -737,12 +766,8 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { } /// Get the layout of a type. - pub fn ty_layout( - &self, - ty: Ty<'tcx>, - tables: &mut Tables<'tcx, B>, - ) -> Result<Layout<'tcx>, B::Error> { - let layout = tables.layout_of(ty)?.layout; + pub fn ty_layout(&self, ty: Ty<'tcx>) -> Result<Layout<'tcx>, B::Error> { + let layout = self.layout_of(ty)?.layout; Ok(layout) } diff --git a/compiler/rustc_smir/src/rustc_smir/context/mod.rs b/compiler/rustc_smir/src/rustc_smir/context/mod.rs index 75acede8d34..b31d92cdfca 100644 --- a/compiler/rustc_smir/src/rustc_smir/context/mod.rs +++ b/compiler/rustc_smir/src/rustc_smir/context/mod.rs @@ -9,7 +9,7 @@ use rustc_middle::ty; use rustc_middle::ty::layout::{FnAbiOfHelpers, HasTyCtxt, HasTypingEnv, LayoutOfHelpers}; use rustc_middle::ty::{Ty, TyCtxt}; -use crate::rustc_smir::{Bridge, SmirError, Tables}; +use crate::rustc_smir::{Bridge, SmirError}; mod impls; mod traits; @@ -21,7 +21,7 @@ pub use traits::*; /// The [`crate::stable_mir::compiler_interface::SmirInterface`] must go through /// this context to obtain rustc-level information. pub struct SmirCtxt<'tcx, B: Bridge> { - tcx: TyCtxt<'tcx>, + pub(crate) tcx: TyCtxt<'tcx>, _marker: PhantomData<B>, } @@ -32,7 +32,7 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> { } /// Implement error handling for extracting function ABI information. -impl<'tcx, B: Bridge> FnAbiOfHelpers<'tcx> for Tables<'tcx, B> { +impl<'tcx, B: Bridge> FnAbiOfHelpers<'tcx> for SmirCtxt<'tcx, B> { type FnAbiOfResult = Result<&'tcx rustc_target::callconv::FnAbi<'tcx, Ty<'tcx>>, B::Error>; #[inline] @@ -46,7 +46,7 @@ impl<'tcx, B: Bridge> FnAbiOfHelpers<'tcx> for Tables<'tcx, B> { } } -impl<'tcx, B: Bridge> LayoutOfHelpers<'tcx> for Tables<'tcx, B> { +impl<'tcx, B: Bridge> LayoutOfHelpers<'tcx> for SmirCtxt<'tcx, B> { type LayoutOfResult = Result<ty::layout::TyAndLayout<'tcx>, B::Error>; #[inline] @@ -60,19 +60,19 @@ impl<'tcx, B: Bridge> LayoutOfHelpers<'tcx> for Tables<'tcx, B> { } } -impl<'tcx, B: Bridge> HasTypingEnv<'tcx> for Tables<'tcx, B> { +impl<'tcx, B: Bridge> HasTypingEnv<'tcx> for SmirCtxt<'tcx, B> { fn typing_env(&self) -> ty::TypingEnv<'tcx> { ty::TypingEnv::fully_monomorphized() } } -impl<'tcx, B: Bridge> HasTyCtxt<'tcx> for Tables<'tcx, B> { +impl<'tcx, B: Bridge> HasTyCtxt<'tcx> for SmirCtxt<'tcx, B> { fn tcx(&self) -> TyCtxt<'tcx> { self.tcx } } -impl<'tcx, B: Bridge> HasDataLayout for Tables<'tcx, B> { +impl<'tcx, B: Bridge> HasDataLayout for SmirCtxt<'tcx, B> { fn data_layout(&self) -> &rustc_abi::TargetDataLayout { self.tcx.data_layout() } diff --git a/compiler/rustc_smir/src/rustc_smir/mod.rs b/compiler/rustc_smir/src/rustc_smir/mod.rs index b597189585b..e82e6e20b49 100644 --- a/compiler/rustc_smir/src/rustc_smir/mod.rs +++ b/compiler/rustc_smir/src/rustc_smir/mod.rs @@ -14,7 +14,7 @@ use context::SmirCtxt; use rustc_hir::def::DefKind; use rustc_middle::mir; use rustc_middle::mir::interpret::AllocId; -use rustc_middle::ty::{self, Instance, Ty, TyCtxt}; +use rustc_middle::ty::{self, Ty, TyCtxt}; use rustc_span::def_id::{CrateNum, DefId, LOCAL_CRATE}; use crate::rustc_internal::IndexMap; @@ -30,7 +30,6 @@ pub struct SmirContainer<'tcx, B: Bridge> { } pub struct Tables<'tcx, B: Bridge> { - tcx: TyCtxt<'tcx>, pub(crate) def_ids: IndexMap<DefId, B::DefId>, pub(crate) alloc_ids: IndexMap<AllocId, B::AllocId>, pub(crate) spans: IndexMap<rustc_span::Span, B::Span>, @@ -41,10 +40,9 @@ pub struct Tables<'tcx, B: Bridge> { pub(crate) layouts: IndexMap<rustc_abi::Layout<'tcx>, B::Layout>, } -impl<'tcx, B: Bridge> Tables<'tcx, B> { - pub(crate) fn new(tcx: TyCtxt<'tcx>) -> Self { +impl<'tcx, B: Bridge> Default for Tables<'tcx, B> { + fn default() -> Self { Self { - tcx, def_ids: IndexMap::default(), alloc_ids: IndexMap::default(), spans: IndexMap::default(), @@ -69,46 +67,6 @@ impl<'tcx, B: Bridge> Tables<'tcx, B> { pub(crate) fn intern_mir_const(&mut self, constant: mir::Const<'tcx>) -> B::MirConstId { self.mir_consts.create_or_fetch(constant) } - - /// Return whether the instance as a body available. - /// - /// Items and intrinsics may have a body available from its definition. - /// Shims body may be generated depending on their type. - pub(crate) fn instance_has_body(&self, instance: Instance<'tcx>) -> bool { - let def_id = instance.def_id(); - self.item_has_body(def_id) - || !matches!( - instance.def, - ty::InstanceKind::Virtual(..) - | ty::InstanceKind::Intrinsic(..) - | ty::InstanceKind::Item(..) - ) - } - - /// Return whether the item has a body defined by the user. - /// - /// Note that intrinsics may have a placeholder body that shouldn't be used in practice. - /// In StableMIR, we handle this case as if the body is not available. - pub(crate) fn item_has_body(&self, def_id: DefId) -> bool { - let must_override = if let Some(intrinsic) = self.tcx.intrinsic(def_id) { - intrinsic.must_be_overridden - } else { - false - }; - !must_override && self.tcx.is_mir_available(def_id) - } - - fn filter_fn_def(&mut self, def_id: DefId) -> Option<DefId> { - if matches!(self.tcx.def_kind(def_id), DefKind::Fn | DefKind::AssocFn) { - Some(def_id) - } else { - None - } - } - - fn filter_static_def(&mut self, def_id: DefId) -> Option<DefId> { - matches!(self.tcx.def_kind(def_id), DefKind::Static { .. }).then(|| def_id) - } } /// A trait defining types that are used to emulate StableMIR components, which is really diff --git a/compiler/rustc_smir/src/stable_mir/alloc.rs b/compiler/rustc_smir/src/stable_mir/alloc.rs index 4e6facac705..5f85d8d3429 100644 --- a/compiler/rustc_smir/src/stable_mir/alloc.rs +++ b/compiler/rustc_smir/src/stable_mir/alloc.rs @@ -48,20 +48,17 @@ pub(crate) fn try_new_allocation<'tcx>( tables: &mut Tables<'tcx, BridgeTys>, cx: &SmirCtxt<'tcx, BridgeTys>, ) -> Result<Allocation, Error> { - use rustc_smir::context::SmirTypingEnv; - let layout = cx - .layout_of(cx.fully_monomorphized().as_query_input(ty)) - .map_err(|e| Error::from_internal(e))?; + let layout = alloc::create_ty_and_layout(cx, ty).map_err(|e| Error::from_internal(e))?; match const_value { ConstValue::Scalar(scalar) => { - alloc::try_new_scalar(layout, scalar, tables).map(|alloc| alloc.stable(tables, cx)) + alloc::try_new_scalar(layout, scalar, cx).map(|alloc| alloc.stable(tables, cx)) } ConstValue::ZeroSized => Ok(new_empty_allocation(layout.align.abi)), ConstValue::Slice { data, meta } => { - alloc::try_new_slice(layout, data, meta, tables).map(|alloc| alloc.stable(tables, cx)) + alloc::try_new_slice(layout, data, meta, cx).map(|alloc| alloc.stable(tables, cx)) } ConstValue::Indirect { alloc_id, offset } => { - let alloc = alloc::try_new_indirect(alloc_id, tables); + let alloc = alloc::try_new_indirect(alloc_id, cx); use rustc_smir::context::SmirAllocRange; Ok(allocation_filter(&alloc.0, cx.alloc_range(offset, layout.size), tables, cx)) } diff --git a/compiler/rustc_smir/src/stable_mir/compiler_interface.rs b/compiler/rustc_smir/src/stable_mir/compiler_interface.rs index 9d75f366416..c621ace8256 100644 --- a/compiler/rustc_smir/src/stable_mir/compiler_interface.rs +++ b/compiler/rustc_smir/src/stable_mir/compiler_interface.rs @@ -432,7 +432,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { let tables_ref = &mut *tables; let cx = &*self.cx.borrow(); let def = item.internal(tables_ref, cx); - cx.has_body(def, tables_ref) + cx.has_body(def) } fn foreign_modules(&self, crate_num: CrateNum) -> Vec<ForeignModuleDef> { @@ -448,18 +448,16 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { fn crate_functions(&self, crate_num: CrateNum) -> Vec<FnDef> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); - let tables_ref = &mut *tables; - let krate = crate_num.internal(tables_ref, cx); - cx.crate_functions(krate, tables_ref).iter().map(|did| tables.fn_def(*did)).collect() + let krate = crate_num.internal(&mut *tables, cx); + cx.crate_functions(krate).iter().map(|did| tables.fn_def(*did)).collect() } /// Retrieve all static items defined in this crate. fn crate_statics(&self, crate_num: CrateNum) -> Vec<StaticDef> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); - let tables_ref = &mut *tables; - let krate = crate_num.internal(tables_ref, cx); - cx.crate_statics(krate, tables_ref).iter().map(|did| tables.static_def(*did)).collect() + let krate = crate_num.internal(&mut *tables, cx); + cx.crate_statics(krate).iter().map(|did| tables.static_def(*did)).collect() } fn foreign_module(&self, mod_def: ForeignModuleDef) -> ForeignModule { @@ -908,7 +906,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); let instance = tables.instances[instance]; - cx.instance_body(instance, &mut *tables).map(|body| body.stable(&mut *tables, cx)) + cx.instance_body(instance).map(|body| body.stable(&mut *tables, cx)) } /// Get the instance type with generic instantiations applied and lifetimes erased. @@ -1078,7 +1076,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); let instance = tables.instances[def]; - cx.instance_abi(instance, &mut *tables).map(|fn_abi| fn_abi.stable(&mut *tables, cx)) + cx.instance_abi(instance).map(|fn_abi| fn_abi.stable(&mut *tables, cx)) } /// Get the ABI of a function pointer. @@ -1086,7 +1084,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); let sig = fn_ptr.internal(&mut *tables, cx); - cx.fn_ptr_abi(sig, &mut *tables).map(|fn_abi| fn_abi.stable(&mut *tables, cx)) + cx.fn_ptr_abi(sig).map(|fn_abi| fn_abi.stable(&mut *tables, cx)) } /// Get the layout of a type. @@ -1094,7 +1092,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> { let mut tables = self.tables.borrow_mut(); let cx = &*self.cx.borrow(); let internal_ty = ty.internal(&mut *tables, cx); - cx.ty_layout(internal_ty, &mut *tables).map(|layout| layout.stable(&mut *tables, cx)) + cx.ty_layout(internal_ty).map(|layout| layout.stable(&mut *tables, cx)) } /// Get the layout shape. |
