From 5344e639e8d78fee056dd9705f6e12557892e4af Mon Sep 17 00:00:00 2001 From: Adrian Palacios Date: Tue, 12 Mar 2024 19:06:41 +0000 Subject: [PATCH] Move check to public API --- compiler/rustc_smir/src/rustc_smir/context.rs | 25 +++++-------------- compiler/stable_mir/src/compiler_interface.rs | 2 +- compiler/stable_mir/src/mir/mono.rs | 5 +++- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/compiler/rustc_smir/src/rustc_smir/context.rs b/compiler/rustc_smir/src/rustc_smir/context.rs index ea3494264fad1..fed1d98d5e6ad 100644 --- a/compiler/rustc_smir/src/rustc_smir/context.rs +++ b/compiler/rustc_smir/src/rustc_smir/context.rs @@ -587,27 +587,14 @@ impl<'tcx> Context for TablesWrapper<'tcx> { } } - /// Retrieve the plain intrinsic name of an instance if it's an intrinsic. - fn intrinsic_name(&self, def: InstanceDef) -> Option { + /// Retrieve the plain intrinsic name of an instance. + /// + /// This assumes that the instance is an intrinsic. + fn intrinsic_name(&self, def: InstanceDef) -> Symbol { let tables = self.0.borrow_mut(); let instance = tables.instances[def]; - match instance.def { - ty::InstanceDef::Intrinsic(..) | ty::InstanceDef::Item(..) => { - let intrinsic = tables.tcx.intrinsic(instance.def_id())?; - Some(intrinsic.name.to_string()) - } - ty::InstanceDef::VTableShim(..) - | ty::InstanceDef::ReifyShim(..) - | ty::InstanceDef::Virtual(..) - | ty::InstanceDef::ThreadLocalShim(..) - | ty::InstanceDef::ClosureOnceShim { .. } - | ty::InstanceDef::ConstructCoroutineInClosureShim { .. } - | ty::InstanceDef::CoroutineKindShim { .. } - | ty::InstanceDef::DropGlue(..) - | ty::InstanceDef::FnPtrShim(..) - | ty::InstanceDef::CloneShim(..) - | ty::InstanceDef::FnPtrAddrShim(..) => None, - } + let intrinsic = tables.tcx.intrinsic(instance.def_id()).unwrap(); + intrinsic.name.to_string() } fn ty_layout(&self, ty: Ty) -> Result { diff --git a/compiler/stable_mir/src/compiler_interface.rs b/compiler/stable_mir/src/compiler_interface.rs index 21dc34d1476aa..1c51c175d81b5 100644 --- a/compiler/stable_mir/src/compiler_interface.rs +++ b/compiler/stable_mir/src/compiler_interface.rs @@ -183,7 +183,7 @@ pub trait Context { fn vtable_allocation(&self, global_alloc: &GlobalAlloc) -> Option; fn krate(&self, def_id: DefId) -> Crate; fn instance_name(&self, def: InstanceDef, trimmed: bool) -> Symbol; - fn intrinsic_name(&self, def: InstanceDef) -> Option; + fn intrinsic_name(&self, def: InstanceDef) -> Symbol; /// Return information about the target machine. fn target_info(&self) -> MachineInfo; diff --git a/compiler/stable_mir/src/mir/mono.rs b/compiler/stable_mir/src/mir/mono.rs index 53c496246f011..38e5776c48cea 100644 --- a/compiler/stable_mir/src/mir/mono.rs +++ b/compiler/stable_mir/src/mir/mono.rs @@ -95,7 +95,10 @@ impl Instance { /// The plain name does not include type arguments (as `trimmed_name` does), /// which is more convenient to match with intrinsic symbols. pub fn intrinsic_name(&self) -> Option { - with(|context| context.intrinsic_name(self.def)) + match self.kind { + InstanceKind::Intrinsic => Some(with(|context| context.intrinsic_name(self.def))), + InstanceKind::Item | InstanceKind::Virtual { .. } | InstanceKind::Shim => None, + } } /// Resolve an instance starting from a function definition and generic arguments.